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

上传人:第*** 文档编号:57513378 上传时间:2018-10-22 格式:DOC 页数:30 大小:542.50KB
返回 下载 相关 举报
实验报告---实验三图像灰度变换处理_第1页
第1页 / 共30页
实验报告---实验三图像灰度变换处理_第2页
第2页 / 共30页
实验报告---实验三图像灰度变换处理_第3页
第3页 / 共30页
实验报告---实验三图像灰度变换处理_第4页
第4页 / 共30页
实验报告---实验三图像灰度变换处理_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《实验报告---实验三图像灰度变换处理》由会员分享,可在线阅读,更多相关《实验报告---实验三图像灰度变换处理(30页珍藏版)》请在金锄头文库上搜索。

1、天津理工大学天津理工大学 计算机科学与工程学院计算机科学与工程学院 实验报告实验报告 2016 至至 2017 学年学年 第第 二二 学期学期 实验三实验三 图像灰度变换处理图像灰度变换处理 课程名称课程名称数字图像处理数字图像处理 学号学号学生姓名学生姓名卢洪利卢洪利年级年级 2014 专业专业 计算机科学计算机科学 与技术与技术 教学班号教学班号 2 实验地点实验地点 主主7-215 实验时间实验时间 2016年年4月月 4日日 第第1节节 至至 第第 2 节节 主讲教师主讲教师 杨淑莹杨淑莹 实验成绩实验成绩 软件运行软件运行特色特色算法分析算法分析流程设计流程设计报告成绩报告成绩总成绩

2、总成绩 实验(三)实验(三)实验名称实验名称图像灰度变换处理 软件环境软件环境 OpenSUSE Leap 42.2 Qt 5.6.1 硬件环境硬件环境 PC 实验目的实验目的 掌握图像的灰度变换原理,编程实现图像的灰度变换功能。 实验内容(应包括实验题目、实验要求、实验任务等)实验内容(应包括实验题目、实验要求、实验任务等) 1 1实现灰度直方图。实现灰度直方图。 要求:了解灰度直方图基本原理,实现灰度直方图。 说明:灰度直方图基本原理 1 灰度直方图简介 2 基本原理 任务: (1)在左视图中打开一幅位图。 (2)制作一个【灰度直方图】菜单,将消息映射到右视图中,在右视图 中实现灰度直方图

3、。 2 2实现灰度线性变换。实现灰度线性变换。 要求:了解灰度线性变换基本原理,实现灰度线性变换。 说明:灰度线性变换基本原理 任务: (1)在左视图中打开一幅位图。 (2)制作一个【灰度线性变换】菜单,将消息映射到右视图中,在右视图 中实现灰度线性变换。 3 3实现灰度非线性变换。实现灰度非线性变换。 要求:了解灰度非线性变换基本原理,实现灰度非线性变换。 说明:灰度非线性变换基本原理 1 灰度对数变换 2 灰度幂次变换 3 灰度指数变换 任务: (1)在左视图中打开一幅位图。 (2)制作一个【灰度对数变换】菜单,将消息映射到右视图中,在右视图 中实现灰度对数变换。 (3)制作一个【灰度幂次

4、变换】菜单,将消息映射到右视图中,在右视图 中实现灰度对数变换。 (4)制作一个【灰度指数变换】菜单,将消息映射到右视图中,在右视图 中实现灰度指数变换。 4 4实现阈值变换。实现阈值变换。 要求:了解阈值变换图基本原理,实现灰度阈值变换 说明:灰度阈值变换基本原理 任务: (1)在左视图中打开一幅位图。 (2)制作一个【阈值变换】菜单,将消息映射到右视图中,在右视图 中实现阈值变换。 5 5实现拉伸变换。实现拉伸变换。 要求:了解拉伸变换图基本原理,实现图像拉伸变换 说明:拉伸拉伸变换基本原理 任务: (1)在左视图中打开一幅位图。 (2)制作一个【拉伸变换】菜单,将消息映射到右视图中,在右

5、视图 中实现拉伸变换。 6 6实现均衡变换。实现均衡变换。 要求:了解均衡变换图基本原理,实现均衡变换。 说明: 任务: (1)在左视图中打开一幅位图。 (2)制作一个【均衡变换】菜单,将消息映射到右视图中,在右视图 中实现均衡变换。 实验过程与实验结果实验过程与实验结果 一、直方图直方图 图像直方图是用来表示图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数 。 对于直方图所表达的含义,简单来说就一条规则:“左暗右明”,横坐标的左侧为纯黑 、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图的波峰应 该出现在左侧和中间(如上图是一张较暗图像的直方图);而整体明亮、只有少

6、量阴影的 图像则相反。 我们的实验中,除了灰度直方图外,还分别对红、绿、蓝三个分量绘制了直方图。 对于真彩色图像来说,绘制灰度直方图的第一步是得到每个像素的灰度值,从RGB转 换为灰度值有一个著名的心理学公式: 之所以不用平均值,是因为是因为人眼对RGB颜色的感知程度并不相同,所以在转换 的时候应该分别为RGB设置不同的权重。 考虑到一幅图像的每个像素都需要使用上面的公式,计算量比较大,我们这里采用了 : 程序截图:程序截图: 图一 直方图 实验代码:实验代码: 因为直方图的绘制过程稍复杂,这里我们将这个功能单独设置为一个类,完成该过程 的计算、存储和在屏幕上的绘制操作。 类的结构包括对灰度及

7、各颜色分量数据的存储、绘制函数: #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 yBas

8、e, 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); p

9、rivate: / index 0 to 255 = count of images 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 bwHstgrm259; / index 0 to 255 = count of images pixels for this value / index 256 = maximum value / index

10、257 = total value of the component int redHstgrm258; int greenHstgrm258; int blueHstgrm258; ; #endif / HISTOGRAM_H 对该类的实现如下: #include “histogram.h“ #include #include Histogram:Histogram(QWidget * parent) : QLabel(parent) for(int i = 0;ibwHstgrmi; redHstgrmi = hstgrm-redHstgrmi; greenHstgrmi = hstgrm

11、-greenHstgrmi; blueHstgrmi = hstgrm-blueHstgrmi; bwHstgrm258 = hstgrm-bwHstgrm258; void Histogram:computeHstgrm(QImage img) if (!img.isNull() for(int i = 0;i= 0 x+) for (int y=0; yheight(); y+) oldColor = QColor(origin.pixel(x,y); grayLevel = (oldColor.red()*299+oldColor.green()*587+oldColor.blue()*

12、114+500)/1000; int _y = _a*grayLevel + _b; / Make sure that the new values are between 0 and 255 _y = qBound(0, _y, 255); newImage-setPixel(x,y,qRgb(_y,_y,_y); / qDebug() #include #include namespace Ui class LinearGrayDialog; class LinearGrayDialog : public QDialog Q_OBJECT public: explicit LinearGr

13、ayDialog(QWidget *parent = 0); LinearGrayDialog(); private: Ui:LinearGrayDialog *ui; void paintFunctionImage(double _a, double _b); signals: void sendData(double a, double b); private slots: void on_buttonBox_accepted(); void on_aDoubleSpinBox_valueChanged(double arg1); void on_bDoubleSpinBox_valueC

14、hanged(double arg1); ; #endif / DIALOG_LINEAR_GRAY_H 对话框实现: #include “dialog_linear_gray.h“ #include “ui_dialog_linear_gray.h“ LinearGrayDialog:LinearGrayDialog(QWidget *parent) : QDialog(parent), ui(new Ui:LinearGrayDialog) ui-setupUi(this); / QPixmap pixmap; / pixmap.load(“:/img/src/lineGrey.gif“)

15、; / ui-label-setPixmap(pixmap); paintFunctionImage(ui-aDoubleSpinBox-value(), ui-bDoubleSpinBox-value(); /* * 绘制线性变换函数的图像 * y = _a*x + _b * */ void LinearGrayDialog:paintFunctionImage(double _a, double _b) / generate some data: QVector x(1001), y(1001); / initialize with entries 0100 for (int i=0; icustomPlot-addGraph(); ui-customPlot-graph(0)-setData(x, y); / give the axes some labels: ui-customPlot-xAxis-setLabel(“x“); ui-customPlot-yAxis-setLabel(“y“); / set axes ranges, so we see all data: ui-customPlot-xAxis-se

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号