实验三:图像空间域平滑
实验目的
理解 图像空间域平滑的目的和意义
了解图像空间域平滑的各种方法及优缺点;
掌握图像空间域的邻域运算方法;
编程实现图像局部平均法、空间低通率波法、中值滤波法对图像进行滤波处理
理解空间低通滤波法与其他各种图象平滑的区别和联系
对“椒盐噪声图像”进行图像平滑处理;
总结实验过程。
实验要求
- 编写图像 空间域平滑程序
编程对图像作各种平滑处理,编写图像空间域平滑子程序,子程序包括: 邻域 平均法、中
值滤波法;
用不同的平滑方法处理不同类型噪声的图像,观察不同的图像平滑 方法、 不同的平滑参数
对图像平滑的的作用;
观察不同的图像平滑方法对具有椒盐类噪声的图像的处理效果 ,输出处理后的结果 。 - 观察图像平滑处理结果
利用 Photoshop 对图像实施平滑处理。
实现图像平滑方法;
分析对比 Photoshop 和自己编写的图像平滑程序处理效果不同之处,并设法改 进 自己的图
像处理程序。
扩展内容
- 查找 双边滤波 算法 ,用双边滤波对扩展图像 3 进行 增强处理,消除 人物 脸上的斑点。
代码及操作
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
// 部分参数
int DELAY_CAPTION = 1500;//字幕显示时长
int DELAY_BLUR = 100;//加深模糊的时间间隔
int MAX_KERNEL_LENGTH = 31;//核的边长最大值
// 通用的矩阵,和显示函数
Mat src; Mat dst;
char window_name[] = "Smoothing Demo";
int display_caption(const char* caption);
int display_dst(int delay);
int BlursDisplay(char original[]);
int main()
{
char ori_1[] = "Salt and pepper-1.jpg";
BlursDisplay(ori_1);
char ori_2[] = "Salt and pepper-2.jpg";
BlursDisplay(ori_2);
char ori_3[] = "Gaussian noise.jpg";
BlursDisplay(ori_3);
char ori_4[] = "extension-1.jpg";
BlursDisplay(ori_4);
char ori_5[] = "extension-2.jpg";
BlursDisplay(ori_5);
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 轮流显示模糊效果
int BlursDisplay(char original[])
{
//读入图像,创建窗口
src = imread(original, IMREAD_COLOR);
namedWindow(window_name, WINDOW_AUTOSIZE);
//显示“Original Image”字幕和源图像,如果按键则display_caption函数返回非零值,程序结束
if (display_caption(original) != 0) { return 0; }
dst = src.clone();
if (display_dst(DELAY_CAPTION) != 0) { return 0; }
//邻域平均模糊,调用cv:blur(),晶格边长从1开始每次循环递增2,到MAX_KERNEL_LENGTH为止
//显示“Homogeneous Image”字幕和源图像,如果按键则display_caption函数返回非零值,程序结束
if (display_caption("Homogeneous Blur") != 0) { return 0; }
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
blur(src, dst, Size(i, i), Point(-1, -1));
if (display_dst(DELAY_BLUR) != 0) { return 0; }
}
//高斯模糊,调用cv:GaussianBlur(),晶格变化同上
//显示“Gaussian Blur"字幕和源图像,如果按键则display_caption函数返回非零值,程序结束
if (display_caption("Gaussian Blur") != 0) { return 0; }
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
GaussianBlur(src, dst, Size(i, i), 0, 0);
if (display_dst(DELAY_BLUR) != 0) { return 0; }
}
//中值模糊,调用cv:medianBlur(),晶格变化同上
//字幕变化
if (display_caption("Median Blur") != 0) { return 0; }
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
medianBlur(src, dst, i);
if (display_dst(DELAY_BLUR) != 0) { return 0; }
}
//双边模糊,调用cv:bilateralBlur,晶格变化同上
//字幕变化
if (display_caption("Bilateral Blur") != 0) { return 0; }
for (int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2)
{
bilateralFilter(src, dst, i, i * 2, i / 2);
if (display_dst(DELAY_BLUR) != 0) { return 0; }
}
//结束工作
display_caption("End: Press a key!");
waitKey(0);
return 0;
}
// 显示字幕(内容)
int display_caption(const char* caption)
{
// 设置空Mat dst
Mat dst = Mat::zeros(src.size(), src.type());
//调用putText函数加入字幕
//void putText( InputOutputArray img, const String& text, Point org,
//int fontFace, double fontScale, Scalar color,
//int thickness = 1, int lineType = LINE_8,
//bool bottomLeftOrigin = false );
putText(dst, caption,
Point(src.cols / 4, src.rows / 2),
FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255));
//显示图像,若延迟时按键则返回-1,若未按键则返回0.
imshow(window_name, dst);
int c = waitKey(DELAY_CAPTION);
if (c >= 0) { return -1; }
return 0;
}
// 显示dst图像(含延迟),若延迟时按键则返回-1,若未按键则返回0.
int display_dst(int delay)
{
imshow(window_name, dst);
int c = waitKey(delay);
if (c >= 0) { return -1; }
return 0;
}
Photoshop自带模糊种类
对椒盐噪声图像-1进行半径为2的方框模糊(平均模糊)
对椒盐噪声图像-1进行半径为20的高斯模糊
对椒盐噪声图像-1进行某种场景模糊
对实验三扩展-2进行径向模糊
对比
- Photoshop的模糊处理拥有更为直观的操作界面,方便更改参数。
- Photoshop拥有更丰富的模糊功能
- Photoshop有历史记录功能,可以还原以前的操作步骤
不足之处
经实验,cv:putText()函数不兼容中文,参考资料【2】中有介绍方法,但因时间有限暂未采用。
参考资料
- OpenCV平滑图像:https://www.w3cschool.cn/opencv/opencv-a4gp2cfi.html
- OpenCV显示中文汉字:https://blog.csdn.net/hk121/article/details/80612797
- 模糊效果,简单讲解5种常见的模糊效果:http://www.16xx8.com/photoshop/jiaocheng/2015/138973.html
- PS“模糊” 滤镜快速入门指南:http://www.photoworld.com.cn/post/97537
- OpenCV显示中文汉字:https://blog.csdn.net/hk121/article/details/80612797
- 模糊效果,简单讲解5种常见的模糊效果:http://www.16xx8.com/photoshop/jiaocheng/2015/138973.html
- PS“模糊” 滤镜快速入门指南:http://www.photoworld.com.cn/post/97537