type
status
date
slug
summary
tags
category
icon
password

项目报告:图像处理

一、绪论

1.1 问题背景与动机

近年来,人工智能的风暴席卷全球,尤其是基于计算机视觉的创新与革命,充斥着我们的眼球,显得特别高深莫测,其实这些高大上的应用都离不开图像处理的基本算法。经过前人研究表明,人的感觉中,70%是通过视觉感知世界,人眼捕获的图像,经过大脑皮层,神经的处理,最终得到一个我们想得知的结果,反馈给大脑中枢,其实,图像处理系统的工作原理也是有异曲同工之妙。视觉传感器捕获图像,图像处理算法以及神经网络算法等对捕获的图像进行处理,最终结果反馈给中控。图像处理算法是计算机理解图像所必须的环节之一,本次项目主要针对图像处理完成几个基础内容,包括图像翻转、缩放、旋转、拼图、裁剪、灰化、马赛克、滤镜、色彩增强、均值滤波、负片以及图像边缘检测、检测图片中的圆和统计大米面积(像素个数)等功能,选题灵感来源于老师上课内容及课程PPT中展示的功能。

1.2 相关工作及方法简介

1.2.1 相关工作

主要整理了老师上学期所布置作业中完成的功能和代码,并作修改以满足本次功能完成的需要,前期通过网上搜索、查阅资料和书籍结合课程所学内容对本次课程设计的程序做出初步规划,并学习Qt所需相关用法。

1.2.2 方法简介

此次项目基于Qt和C++完成程序,对图像处理的方法主要是将.bmp图像以数组的方式进行处理,将.bmp文件作为Image类对象完成相应操作,图像信息存入一维数组data,数组data大小为linebyte = height * width,通过矩阵变换和矩阵相关算法完成对图像处理的相关操作。

二、项目目标

2.1 程序可视化

通过Qt设计完成程序可视化设计,用户可在可视化界面,通过鼠标和键盘完成对程序的操作,包括读取和保存图片文件,以及完成绪论中提到的图像翻转、缩放、旋转、拼图、裁剪、灰化、马赛克、滤镜、色彩增强、均值滤波、负片以及图像边缘检测、检测图片中的圆和统计大米面积(像素个数)等功能的操作。

2.2 主要功能

2.2.1 边缘检测

用户选择传入图片,点击“边缘检测”功能按键,程序输出一张完成边缘检测的灰度图,“边缘检测”主要实现对传入图片中的物体进行边缘检测,主要目的是标识数字图像中亮度变化明显的点。

2.2.2 图片中的圆

用户选择传入图片,点击“圆形检测”功能按键,程序输出一张完成圆形检测的图片,在原图基础上,对检测到的圆形进行标记(在圆心用+符号标记)

2.2.3 统计大米面积

用户选择传入图片,点击“大米检测”功能按键,程序界面输出统计得到的大米面积图像,将检测到的大米以红色标出,并输出大米面积(像素个数)。

2.3 其他功能

用户通过导航栏“文件(F)”的“打开”选项、图标按键或直接将目标文件拖入窗口的方式,传入并打开文件;对用户传入的图像,用户可通过点击按键或拖动滑块完成对程序的操作,点击“图像翻转”图标,翻转图像;点击“图像旋转”图标,图像逆时针旋转90°;点击“灰度化”按键,图像处理界面展示灰化后的图像;拖动“比例”滑块,完成对图像的缩放,缩放效果在图像处理界面展示,还可通过双击图片,查看大图;滤镜操作栏中包括调节亮度、对比度、饱和度、二值化,通过拖动对应滑块完成相应操作,呈现效果在图像处理窗口展示;色彩增强操作栏,通过拖动“R值增强”、“G值增强”、“B值增强”滑块,完成对相应色彩的增强操作,增强效果同样在图像处理窗口展示;点击“马赛克”按键,可在图像处理窗口中选择打码区域,对图像进行马赛克处理;顶部导航栏点击“拼图(C)”按键选择拼图方式,然后选择要拼接的图像,窗口输出拼接后的图片;点击”裁剪(U)"按键并进行裁剪区域编辑,窗口输出裁剪后的图片;点击“负片”按键,窗口输出经曝光和显影加工后的图像(即负片)。   侧边栏中“显示原图”按键,点击则查看原图,松开鼠标则显示处理后的图片,实现图像处理对比效果;“恢复原图”按键可将处理后的图像还原为原图,显示在图像处理窗口。最后用户可通过导航栏“文件(F)”的“保存”选项或图标按键将操作完成的图片保存到指定位置。

2.4 展示视频

三、成员分工

小组共五名成员,张成玺(组长)主要负责完成“检测图片中的圆”功能设计,郝文轩主要负责完成“边缘检测”功能设计、整理修改上学期所完成的代码,杨三瑞主要负责完成GUI界面设计并整合代码完成可视化操作设计,高宇鹏主要负责“统计大米面积”功能设计,黄成斌主要负责项目报告的撰写和项目描述视频制作,成员通过线上讨论互相协助完成程序设计,通过创建Gitee仓库提交代码,互相交流,通力合作。

四、所用工具和资源

4.1 所用工具

1、QtCreator
后期实现完整程序,和完成程序可视化设计。
2、Visual Studio
前期还未转入Qt设计时,在Visual Studio先进行相关算法设计和测试。

4.2 所用资源

1、<iostream>
2、<bits/stdc++.h>
3、<Windows.h>
4、<QMainWindow>
5、<QApplication>
6、<Qlacale>
7、<QTranslator>
8、<QFileDialog>
9、<QMessageBox>
10、<QLabel>
11、<stack>
12、<vector>
13、<algorithm>
14、<math.h>
15、<QDragEnterEvent>
16、<QMimeData>
17、<QIntValidator>
18、<QWidget>

五、方法细节

5.1 边缘检测

边缘检测本质上是一种滤波算法。

5.1.1 梯度算子

在边缘检测中,计算梯度是非常重要的一环,梯度可用于检测边缘,一定程度上,在某一点梯度的模越大,可近似的认为该点为边缘点,计算梯度首先要计算偏微分
梯度
本项目用Sobel算子
分别计算垂直梯度和水平梯度,检测水平边缘与垂直边缘,记录梯度的模。

5.1.2 函数实现流程图

5.2 图片中的圆

5.2.1 算法思路

在极坐标下,假设圆心是(x0,y0)(00),则圆上的点可表示为
若已知圆心
(x0,y0)
(00)
和半径r,那么旋转360°便可求得圆上所有点,同样,若已知圆上所有点,且已知半径r,那么旋转360°便会得到一个累加的极值点,该点即为圆心。   而考虑到圆半径可能未知,所以本项目思路为

5.2.2 函数解释

动态创建bool类型二维指针vis,其大小为height * width并将其初始化为false,后续用于记录像素点状态。   int cnt = 0, tot = 0,其中cnt用于统计圆的个数,tot用于记录像素点累加值。   定义两个数组
用于简化代码,方便进行坐标变换。
程序遍历整个图像,确定每个连通域,判断连通域是否为圆,若为圆则cnt++,确定圆心并标记,连通域判定条件为
最终输出标记图像。

5.3 统计大米面积

5.3.1 函数实现流程图

5.4 其他功能

5.4.1 均值滤波

均值滤波主要采用邻域平均法,其基本原理是用均值代替原图像中各个像素值(m为当前像素及邻近若干像素总个数)
g(x,y)=∑f(x,y)m()=()

5.4.2 图像翻转

5.4.3 图像缩放

5.4.4 图像旋转

图像旋转一般认为图像应绕中心点旋转,但是图像原点在左上角,在计算时应将左上角的原点移到图像中心,设一点(X0,Y0)(00),图像宽为W,高为H,原点变换后的点为(X1,Y1)(11)
图像旋转角度为
θ
,本项目中
θ
为90°的整数倍,设原点变换后通过矩阵旋转
θ
后的点为
(X2,Y2)
旋转后图像的宽为W’,高为H’,从笛卡尔坐标原点变回左上角

5.4.5 图像拼接

图像上下拼接,即创建一个新对象cat,图像高为两图像高之和,宽为两图像中较宽之一,依次写入拼接图像与被拼接图像数据   图像左右拼接,同样创建一个新对象cat,图像高为两图像中高较大者,宽为两图像宽之和,分别将拼接图像和被拼接图像数据传入**a**b,按拼接要求将**a**b赋值给out,最终将out中数据传给cat

5.4.6 图像灰化

本项目中的灰化功能采用平均值法,将RGB三通道的值取平均得到灰度值

5.4.7 马赛克

用户选定打码范围后,函数获得起始和终止像素点坐标,程序设定马赛克色块大小x=10,传入参数,程序选择色块初始点,以初始点色彩数值替换该色块其他像素点,达到降低图片分辨率的效果。

5.4.8 图像滤镜

5.4.8.1 亮度

对每个像素点的色彩值进行运算,在保证值的范围为[0, 255]的前提下,将像素点的值加上value,即完成亮度调整,若值高于255则取255,低于0则取0。

5.4.8.2 对比度

对比度是不同像素点之间的差值,差值越大,对比度越强。   判断contrast正负,若contrast > 0
contrast < 0
contrast == 0

5.4.8.3 饱和度

调整饱和度首先将RGB空间图像转换为HSL空间
其中L表示亮度,S表示饱和度,min和max代表RGB空间中的R、G、B颜色值中的最小最大值,范围均为[0, 1]的实数

5.4.8.4 二值化

对用户传入图像以及所给阈值,小于阈值取0,大于阈值取255

5.4.9 图像色彩增强

用户选择R、G、B任一色彩值,根据增强值value对每一像素点的相应色彩值进行运算,保证色彩值范围在[0, 255],高于255则取255,低于0则取0。

5.4.10 图像裁剪

用户定位裁剪区域的坐标点,建立新的对象存储选定区域的像素内存数据

六、结果

6.1 初始界面

notion image
打开并显示位图文件:
notion image

6.2 边缘检测

notion image

6.3 圆形检测

原图:
notion image
检测结果:
notion image

6.4 大米检测

原图:
notion image
检测结果:
notion image

6.5 均值滤波

notion image

6.6 图像翻转

notion image

6.7 图像缩放

6.7.1 图像放大

notion image

6.7.2 图像缩小

notion image

6.8 图像旋转

6.8.1 旋转90°

notion image

6.8.2 旋转180°

notion image

6.9 图像拼接

上拼效果:
notion image
双击放大:
notion image
左拼效果:
notion image

6.10 图像灰化

notion image

6.11 马赛克

6.11.1 马赛克设置

notion image

6.11.2 马赛克

notion image

6.12 图像滤镜

6.12.1 亮度

6.12.1.1 亮度加

notion image

6.12.1.2 亮度减

notion image

6.12.2 对比度

6.12.2.1 对比度增

notion image

6.12.2.2 对比度减

notion image

6.12.3 饱和度

notion image

6.12.4 二值化

notion image

6.13 色彩增强

6.13.1 R值增强

notion image

6.13.2 G值增强

notion image

6.13.3 B值增强

notion image

6.14 裁剪

6.14.1 裁剪编辑

notion image

6.14.2 裁剪

notion image

6.15 负片

notion image

6.16 恢复原图

notion image
 

、引用参考

微博互动预测For New World
  • Artalk
  • Utterance