实验报告---实验三图像灰度变换处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与工程学院

天津理工大学

计算机科学与工程学院

实验报告

2016 至2017 学年第二学期

实验三图像灰度变换处理

课程名称数字图像处理

学号学生姓名卢洪利年级2014

专业计算机科学

与技术

教学班号2实验地点主7-215

实验时间2016年4月4日第1节至第2 节

主讲教师杨淑莹

实验成绩

软件运行特色算法分析流程设计报告成绩总成绩

实验(三)实验名称图像灰度变换处理

软件环境OpenSUSE Leap 42.2

Qt 5.6.1

硬件环境PC

实验目的

掌握图像的灰度变换原理,编程实现图像的灰度变换功能。

实验内容(应包括实验题目、实验要求、实验任务等)

1.实现灰度直方图。

要求:了解灰度直方图基本原理,实现灰度直方图。

说明:灰度直方图基本原理

1 灰度直方图简介

2 基本原理

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【灰度直方图】菜单,将消息映射到右视图中,在右视图中实现灰度直方图。

2.实现灰度线性变换。

要求:了解灰度线性变换基本原理,实现灰度线性变换。

说明:灰度线性变换基本原理

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【灰度线性变换】菜单,将消息映射到右视图中,在右视图中实现灰度线性变换。

3.实现灰度非线性变换。

要求:了解灰度非线性变换基本原理,实现灰度非线性变换。

说明:灰度非线性变换基本原理

1灰度对数变换

2灰度幂次变换

3灰度指数变换

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【灰度对数变换】菜单,将消息映射到右视图中,在右视图中实现灰度对数变换。

(3)制作一个【灰度幂次变换】菜单,将消息映射到右视图中,在右视图中实现灰度对数变换。

(4)制作一个【灰度指数变换】菜单,将消息映射到右视图中,在右视图

中实现灰度指数变换。

4.实现阈值变换。

要求:了解阈值变换图基本原理,实现灰度阈值变换

说明:灰度阈值变换基本原理

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【阈值变换】菜单,将消息映射到右视图中,在右视图

中实现阈值变换。

5.实现拉伸变换。

要求:了解拉伸变换图基本原理,实现图像拉伸变换

说明:拉伸变换基本原理

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【拉伸变换】菜单,将消息映射到右视图中,在右视图

中实现拉伸变换。

6.实现均衡变换。

要求:了解均衡变换图基本原理,实现均衡变换。

说明:

任务:

(1)在左视图中打开一幅位图。

(2)制作一个【均衡变换】菜单,将消息映射到右视图中,在右视图

中实现均衡变换。

实验过程与实验结果

一、直方图

图像直方图是用来表示图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。

对于直方图所表达的含义,简单来说就一条规则:“左暗右明”,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图的波峰应该出现在左侧和中间(如上图是一张较暗图像的直方图);而整体明亮、只有少量阴影的图像则相反。

我们的实验中,除了灰度直方图外,还分别对红、绿、蓝三个分量绘制了直方图。

对于真彩色图像来说,绘制灰度直方图的第一步是得到每个像素的灰度值,从RGB转换为灰度值有一个著名的心理学公式:

之所以不用平均值,是因为是因为人眼对RGB颜色的感知程度并不相同,所以在转换的时候应该分别为RGB设置不同的权重。

考虑到一幅图像的每个像素都需要使用上面的公式,计算量比较大,我们这里采用了:

程序截图:

图一直方图

实验代码:

因为直方图的绘制过程稍复杂,这里我们将这个功能单独设置为一个类,完成该过程的计算、存储和在屏幕上的绘制操作。

#ifndef HISTOGRAM_H

#define HISTOGRAM_H

#include

#include

#include

#include

class Histogram : public QLabel

{

public:

Histogram(QWidget* parent = 0);

Histogram(QWidget*, Histogram*);

void computeHstgrm(QImage img);

void paintEvent(QPaintEvent *e);

void drawBwHstgrm(int xBase, int yBase, int height);

void drawRedHstgrm(int xBase, int yBase, int height);

void drawGreenHstgrm(int xBase, int yBase, int height);

void drawBlueHstgrm(int xBase, int yBase, int height);

int getBwHstgrm(int index);

int getRedHstgrm(int index);

int getGreenHstgrm(int index);

int getBlueHstgrm(int index);

private:

// index 0 to 255 => count of image's pixels for this value // index 256 => maximum value

// index 257 => total value of the dark component

// index 258 => total value of the light component

int bwHstgrm[259];

// index 0 to 255 => count of image's pixels for this value // index 256 => maximum value

// index 257 => total value of the component

int redHstgrm[258];

int greenHstgrm[258];

int blueHstgrm[258];

};

#endif // HISTOGRAM_H

对该类的实现如下:

#include "histogram.h"

#include

#include

Histogram::Histogram(QWidget * parent) : QLabel(parent) {

for(int i = 0;i<256;i++)

{

bwHstgrm[i] = 0;

redHstgrm[i] = 0;

greenHstgrm[i] = 0;

blueHstgrm[i] = 0;

相关文档
最新文档