目录
1.1 原始图像展示
1.2 灰度图展示
1.3 高斯加噪图展示
1.4 均值滤波图展示
1.5 中值滤波图展示
1.6 高斯滤波图展示
对比三种滤波效果
2.1 Sobel边缘检测图展示
2.2 Canny边缘检测图展示
对比两种边缘检测效果
clear; clc; close all;
im = imread('E:\Matlab project\01.jpeg');
figure('NumberTitle', 'off', 'Name', 'smooth 01 with gaussian noise');
subplot(2, 3, 1);
imshow(im); % 显示原始图像
title('原始图像');
im_gray = rgb2gray(im); % 彩色图转灰度图
subplot(2, 3, 2);
imshow(im_gray); % 显示灰度图
title('灰度图');
im_gaus = imnoise(im_gray, 'gaussian', 0., 0.25); % 添加均值为0,方差为0.25的高斯噪声
subplot(2, 3, 3);
imshow(im_gaus); % 显示添加高斯噪声的图像
title('高斯加噪图像');
h = fspecial('average', [5, 5]);
im_mean = imfilter(im_gray, h);
subplot(2, 3, 4);
imshow(im_mean); % 显示均值滤波后的图像
title('均值滤波图像');
均值滤波:均值滤波用其像素点的平均值代替原像素值,在滤除噪声的同时也会滤掉图像的边缘信息。
im_med = medfilt2(im_gray,[5,5]);
subplot(2, 3, 5);
imshow(im_med); % 显示中值滤波后的图像
title('中值滤波图像');
中值滤波:中值滤波用该像素周围邻域像素的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果比较明显。
h = fspecial('gaussian', [18 18], 0.15);
im_gausfilt = imfilter(im_gray, h);
subplot(2, 3, 6);
imshow(im_gausfilt); % 显示高斯滤波后的图像
title('高斯滤波图像');
高斯滤波:高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。
对比上述3种滤波方式的结果,我们可以得出尽管他们都能对加噪后的图片进行还原,但是效果不同。在这3种滤波中,高斯滤波效果最好,它可以清晰的看到狗子的毛发;中值滤波次之,尽管不能看到狗子的毛发并且狗子图像的边缘也略显模糊,但是对于狗子鼻子的还原还是不错的;最差的是均值滤波,看不到狗子的毛发,狗子图像的边缘也很模糊,狗子鼻子部分的还原也很差,滤波效果最差。
I=imread('E:\Matlab project\01.jpeg');
subplot(2,2,1);
imshow(I);
title('原始图像')
I1=rgb2gray(I);
subplot(2,2,2);
imshow(I1);
title('灰度图像');
I2=edge(I1,'sobel');
subplot(2,2,3);
imshow(I2);
title('sobel算子边缘检测');
Sobel算子是计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。Sobel算子是把图像中每个像素的上下左右四领域的灰度值加权差,在边缘处达到极值从而检测边缘。
I3=edge(I1,'canny');
subplot(2,2,4);
imshow(I3);
title('canny算子边缘检测');
Canny算子是一种非常重要的边缘检测算子,是最优的阶梯型边缘检测算子。它的最优性主要表现在以下三个方面:
(1)好的检测:Canny算子可以尽可能多地标识出原始图像中的实际边缘。
(2)好的定位:它所标记出来的边缘尽可能给你地接近实际图像中的实际边缘。
(3)最小响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不标识成边缘。
对比两种算子所得的边缘检测图,我们可以清晰的看出利用canny算子所得的边缘检测图效果要比sobel算子的好,因为canny算法在边缘检测时采用了非极大值抑制以及双阈值方法,因此排除了非边缘点的干扰,边缘检测效果更好。