實驗三:圖像空間域平滑
實驗目的
理解 圖像空間域平滑的目的和意義
瞭解圖像空間域平滑的各種方法及優缺點;
掌握圖像空間域的鄰域運算方法;
編程實現圖像局部平均法、空間低通率波法、中值濾波法對圖像進行濾波處理
理解空間低通濾波法與其他各種圖象平滑的區別和聯繫
對“椒鹽噪聲圖像”進行圖像平滑處理;
總結實驗過程。
實驗要求
- 編寫圖像 空間域平滑程序
編程對圖像作各種平滑處理,編寫圖像空間域平滑子程序,子程序包括: 鄰域 平均法、中
值濾波法;
用不同的平滑方法處理不同類型噪聲的圖像,觀察不同的圖像平滑 方法、 不同的平滑參數
對圖像平滑的的作用;
觀察不同的圖像平滑方法對具有椒鹽類噪聲的圖像的處理效果 ,輸出處理後的結果 。 - 觀察圖像平滑處理結果
利用 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