1、边缘检测
① 处理结果 = edge(原始图像,算子)
算子:
Sobel log
Roberts Canny
Prewitt zerocross
%% 边缘检测 I = imread('cameraman.tif'); J1 = edge(I,'Sobel'); subplot(3,3,1),imshow(I);title('原始图像'); subplot(3,3,2),imshow(J1);title('Sobel检测图像'); J2 = edge(I,'Roberts'); subplot(3,3,3),imshow(J2);title('Roberts检测图像'); J3 = edge(I,'Prewitt'); subplot(3,3,4),imshow(J3);title('Prewitt检测图像'); J4 = edge(I,'log'); subplot(3,3,5),imshow(J4);title('log检测图像'); J5 = edge(I,'Canny'); subplot(3,3,6),imshow(J5);title('Canny检测图像'); J6 = edge(I,'zerocross'); subplot(3,3,7),imshow(J6);title('zerocross检测图像');
2、形态学变换
(1)图像腐蚀
se = strel('disk' ,3);
resultImage=imerode(originalImage, se);
%% 图像腐蚀 I = imread('cameraman.tif'); se = strel('disk',3); J = imerode(I,se); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
(2)膨胀
se = strel('disk' ,3);
resultImage=imdilate(originalImage, se);
%% 膨胀 I = imread('cameraman.tif'); se = strel('disk',3); J = imdilate(I,se); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
(3)开运算
先腐蚀,后膨胀。
A被B形态学开运算表示为:A•B
A被B腐蚀,再用B膨胀结果。
se = strel('square' ,3);
resultImage=imopen(originalImage, se);
%% 开运算 I = imread('cameraman.tif'); se = strel('square',3); J = imopen(I,se); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
(4)闭运算
先膨胀,后腐蚀。
A被B形态学闭运算表示为:A•B
A被B膨胀,再用B腐蚀结果。
se = strel('square' ,3);
resultImage=imclose(originalImage, se);
%% 闭运算 I = imread('cameraman.tif'); se = strel('square',3); J = imclose(I,se); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
3、图像增强
(1)直方图
imhist(原图像)
%% 直方图 I = imread('cameraman.tif'); imhist(I);
① 直方图的均衡化:
经过均衡化处理的图像,像素占有更多的灰度级并且分布更均衡。这样的图像,具有较高的对比图。
处理结果=histeq(原始图像)
%% 均衡化 I = imread('cameraman.tif'); J = histeq(I); subplot(2,2,1),imshow(I); subplot(2,2,2),imshow(J); subplot(2,2,3),imhist(J);
(2)灰度变换
结果=imadjust(原始图像,[原值范围],[新值范围])
原始图像:自动切换到值在[0,1]
[原值范围]:[值1,值2]
[新值范围]:[值3,值4]
%% 灰度变换 I = imread('cameraman.tif'); J1 = imadjust(I,[0.3 0.7],[0 1]); J2 = imadjust(I,[0 1],[1 0]); % 负片 subplot(1,3,1),imshow(I); subplot(1,3,2),imshow(J1); subplot(1,3,3),imshow(J2);
(3)灰度对数变换
增强一幅图像中较暗部分的细节。
目标图像=log(原始图像);
代码:J=log(im2double(I)+1);
I = imread('cameraman.tif'); J = log(im2double(I)+10); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J,[]);
(4)中值滤波
处理结果=medfilt2(原始图像);
%% 中值滤波 I = imread('cameraman.tif'); J = medfilt2(I); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);