I1(i,j)=z*(I(i,j)-b)+q;
end
end
end
end
end
figure
(1);imshow(I);xlabel('原始图像')
figure
(2);imshow(I1);xlabel('变换后的图像')
注:
改变设定的值,变换后图像的效果就会发生改变
如,当a=30;b=40;L=255;x=2;y=4;z=3;p=15;q=30时,图形如下:
2、编写的MATLAB程序,分别取大于1、小于1的值,取值不少4个,对自选图像进行处理;
clearall
I=imread('tupian.jpg');
I=rgb2gray(I);
I1=double(I)/255;
[m,n]=size(I);
a=0.5;
b=0.8;
c=2;
d=3;
fori=1:
m
forj=1:
n
I2(i,j)=I1(i,j).^a;
I3(i,j)=I1(i,j).^b;
I4(i,j)=I1(i,j).^c;
I5(i,j)=I1(i,j).^d;
end
end
I2=255*I2;
I3=I3*255;
I4=I4*255;
I5=I5*255;
figure
(1)
imshow(I);xlabel('原始图像')
figure
(2)
subplot(2,2,1);imshow(I2,[]);xlabel('r=0.5变换处理后的图像')
subplot(2,2,2);imshow(I3,[]);xlabel('r=0.8变换处理后的图像')
subplot(2,2,3);imshow(I4,[]);xlabel('r=2变换处理后的图像')
subplot(2,2,4);imshow(I5,[]);xlabel('r=3变换处理后的图像')
由原始图像和变换图像对比可以看出,
时,图像将变亮,
时,图像将变暗,可以突出重点想突出的部分。
3、编写直方图均衡的MATLAB程序,对自选图像进行处理;
clearall;
clc
I=imread('tupian.jpg');
I=rgb2gray(I);
J=histeq(I);
subplot(2,2,1);
imshow(I);
title('原始图像');
subplot(2,2,2);
imhist(I);
title('原始图象直方图');axis([0255010000]);
subplot(2,2,3);
imshow(J);
title('均衡化的图像');
subplot(2,2,4);
imhist(J);axis([0255010000]);
title('均衡化后的直方图');
通过直方图均衡化,可以产生一副灰度级分布均匀具有均匀概率密度的图像,把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,通过直方图均衡化使图像得到增强。
4、编写邻域平均法的MATLAB程序,用5种掩模分别处理自选图像;
clearall;
clc
I=imread('tupian.jpg');
I=rgb2gray(I);
[m,n]=size(I);
figure
(1)
imshow(I);xlabel('原始图像')
Q=imnoise(I,'gaussian');
figure
(2)
subplot(2,3,1);imshow(Q,[]);xlabel('加高斯噪声图像')
M=fspecial('average',3);
E=imfilter(Q,M);
subplot(2,3,2);imshow(E,[]);xlabel('3*3平均模板图像')
N=fspecial('average',5);
K=imfilter(Q,N);
subplot(2,3,3);imshow(K,[]);xlabel('5*5平均模板图像')
L=fspecial('average',7);
J=imfilter(Q,L);
subplot(2,3,4);imshow(J,[]);xlabel('7*7平均模板图像')
H=fspecial('average',9);
P=imfilter(Q,H);
subplot(2,3,5);imshow(P,[]);xlabel('9*9平均模板图像')
A=fspecial('average',11);
B=imfilter(Q,A);
subplot(2,3,6);imshow(B,[]);xlabel('11*11平均模板图像')
对原图像加上高斯噪声后,因为噪声均值为0,利用领域均值滤波进行去噪处理,可以减少高斯噪声,但不能消除噪声,平滑模板越大,噪声去除得越多,但图像也因为平滑而变得相对模糊了,细节的锐化程度也逐渐减弱。
5、编写梯度变换的MATLAB程序,用5种梯度图分别处理自选图像;
clear;
clc;
[I]=imread('tupian.jpg');%读入图像
I=rgb2gray(I);
figure;
subplot(2,3,1);imshow(I,[]);xlabel('原始图像')
I=double(I);%转换为double类型
[Gx,Gy]=gradient(I);%计算梯度
G=sqrt(Gx.*Gx+Gy.*Gy);%水平垂直差分
I1=G;
subplot(2,3,2);imshow(I1,[]);xlabel('第一种梯度图')
I2=I;
K=find(G>=7);%指定灰度级
I2(K)=255;
subplot(2,3,3);imshow(I2,[]);xlabel('第二种梯度图')
I3=G;
I3(K)=I(K);
subplot(2,3,4);imshow(I3,[]);xlabel('第三种梯度图')
I4=G;
I4(K)=255;
subplot(2,3,5);imshow(I4,[]);xlabel('第四种梯度图')
I4=255*ones(size(I));
I4(K)=45;
subplot(2,3,6);imshow(I4,[]);xlabel('第五种梯度图')
采用5种不同的梯度图进行处理:
第一种:
第二种:
第三种:
第四种、
第五种、
由梯度图的表达式以及处理后图像可以看出:
第一种:
该方法仅显示灰度变化比较陡的边缘轮廓,灰度变化平缓或均匀的区域呈现黑色,第二种:
既可以使边缘轮廓得到突出,又不破坏灰度变化比较平缓的区域。
第三种:
将明显边缘用以固定的灰度级来呈现。
第四种:
将图像变换比较平缓的区域用一固定的灰度级来表示,可以突出图像边缘,便于研究图像边缘灰度的变化。
第五种:
仅用两个灰度级来完成图像的显示,即用二值图像进行显示,可以很方便地对图像的边缘位置信息进行分析。
6.编写拉普拉斯变换的MATLAB程序,用4种模板分别处理自选图像;
clearall
clc
I=imread('tupian.jpg');
I1=rgb2gray(I);%图像灰度化
figure
(1)
imshow(I1);%title('原始图像')
I1=double(I1);
%模板一
H1=[0,1,0;1,-4,1;0,1,0];
%H1=[111;1-81;111];
J1=conv2(I1,H1,'same');
figure
(2)
imshow(J1);title('模板一处理的图像')
%模板二
H2=[1,0,1;0,-4,0;1,0,1];
J2=conv2(I1,H2,'same');
figure(3)
imshow(J2);title('模板二处理的图像')
%模板三
H3=[0,-1,0;-1,5,-1;0,-1,0];
J3=conv2(I1,H3,'same');
figure(4)
imshow(J3);title('模板三处理的图像')
%模板四
H4=[-1,-1,-1;-1,9,-1;-1,-1,-1];
J4=conv2(I1,H4,'same');
figure(5)
imshow(J4);title('模板三处理的图像')
拉式图像锐化算子:
,
,
比较原始图像和经过拉式算子运算后的图像,可以发现模糊的地方部分得到了锐化,特别是模糊的边缘部分得到了增强,边界更加明显,但是图像显示清楚的地方,经过滤波后,发生了失真,这也是拉式算子的一大缺点。
7.编写其它锐化算子的MATLAB程序,用5种算子分别处理自选图像;
clearall;
clc
I=imread('tupian.jpg');
I1=rgb2gray(I);
bw1=fspecial('Log');
K1=filter2(bw1,I1);%Log算子锐化图像
bw2=fspecial('prewitt');%prewitt算子锐化
K2=filter2(bw2,I1);
bw3=fspecial('sobel');%sobel算子锐化
K3=filter2(bw3,I1);
bw4=fspecial('laplacian');%laplacian算子锐化
K4=filter2(bw4,I1);
K5=edge(I1,'canny');%canny算子锐化图像
%figure
%subplot(2,3,1);imshow(I1);xlabel('原始图像')
figure
(1);imshow(I1);xlabel('原始图像')
figure
(2);imshow(K1);xlabel('Log算子锐化')
figure(3);imshow(K2);xlabel('sprewitt算子锐化')
figure(4);imshow(K3);xlabel('sobel算子锐化')
figure(5);imshow(K4);xlabel('laplacian算子锐化')
figure(6);imshow(K5);xlabel('canny算子锐化')
8.编写中值滤波的MATLAB程序,对自选图像进行处理;
clearall;
clc
I=imread('tupian.jpg');
I=rgb2gray(I);
J=imnoise(I,'salt&pepper');
subplot(2,3,1);imshow(I,[]);xlabel('原始图像');
subplot(2,3,2);imshow(J,[]);xlabel('添加椒盐噪声的图像');
K1=medfilt2(J);
K2=medfilt2(J,[5,5]);
K3=medfilt2(J,[7,7]);
K4=medfilt2(J,[9,9]);
subplot(2,3,3);imshow(K1,[]);xlabel('3*3模板中值滤波');
subplot(2,3,4);imshow(K2,[]);xlabel('5*5模板中值滤波');
subplot(2,3,5);imshow(K3,[]);xlabel('7*7模板中值滤波');
subplot(2,3,6);imshow(K4,[]);xlabel('9*9模板中值滤波');
由处理结果可以看出,中值滤波可以很好地去除椒盐噪声,使图像更加清晰。
使用中值滤波需要注意的是保持图像中的线状物体,如果图像中点线,尖角等细节较多,则不宜采用中值滤波。
可以通过选取不同的窗口来达到不同效果。
9.编写二维线性插值的MATLAB程序,对自选图像放大四倍;
clearall;
clc
I=imread('tupian.jpg');
I1=rgb2gray(I);
J=imresize(I,4,'bilinear');
figure
subplot(1,2,1);imshow(I,[]);xlabel('原始图像')
subplot(1,2,2);imshow(J,[]);xlabel('放大四倍后的图像')
10.编写巴特沃斯滤波器的MATLAB程序,对自选图像进行处理;
clc;
clearall;
I=imread('tupian.jpg');
figure;
subplot(2,2,1);imshow(I);title('原始图像');
J1=imnoise(I,'salt&pepper');%叠加椒盐噪声
subplot(2,2,2);imshow(J1);title('加噪声图像');
g=fft2(double(J1));%傅立叶变换
g=fftshift(g);%转换数据矩阵
[M,N]=size(g);
nn=2;%二阶巴特沃斯(Butterworth)低通滤波器
d0=20;
m=fix(M/2);
n=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数
result(i,j)=h*g(i,j);
T(i,j)=h;
end
end
result=ifftshift(result);
J2=ifft2(result);
J3=uint8(real(J2));
subplot(2,2,3);mesh(T);title('滤波器示意图')
boxon;
%显示滤波处理后的图像
subplot(2,2,4);imshow(J3);title('滤波结果')
11.编写密度切割法的MATLAB程序,对自选图像进行伪彩色增强处理
clearall;
clc
I=imread('tupian.jpg');
I1=rgb2gray(I);
figure
(1)
imshow(I1,[]);xlabel('原始图像')
figure
(2)
I2=I1;
I3=grayslice(I2,16);
imshow(I3,hot(16));xlabel('处理后的图像')
密度分割法也称为强度分割法,对图像的灰度值动态范围进行切割,使得分割后的每一灰度值区间甚至每一灰度值本身对应一种颜色,具体而言,假设把一副图像看成一个二维的强度函数,用多个密度切割曲面对图像函数进行切割,将图像切割成多个区间,每个区间赋予一种颜色,则原来的灰度图像就可以变成一副彩色图像。