实验一
读取一幅图像,完成如下操作,并存储变换后的图像 (1) 把图像翻转90度,并显示 (2) 缩小图像为原图像的1/2 (3) 镜像图像 原图像:
clc; clf; clear;
f=imread('D:\\matlab\\picture.jpg'); %读取D盘中matlab文件夹中名字为picture的格式为jpg的图片 figure,imshow(f)
k=imrotate(f,90); %正数表示逆时针旋转, 负数表示顺时针旋转 figure,imshow(k)
imwrite(k,'D:\\matlab\\k.jpg'); %保存逆时针旋转90度后的图像
逆时针旋转90度后图像:
x=0.5; %横向放2倍。如果想缩2倍就把x改为0.5即可,即变为0.5倍 y=0.5; %纵向放2倍。如果想缩2倍就把y改为0.5即可,即变为0.5倍 T1 = maketform('affine',[x 0 0; 0 1 0; 0 0 1]); T2 = maketform('affine',[1 0 0; 0 y 0; 0 0 1]); I1 = imtransform(k,T1); I2 = imtransform(I1,T2); figure, imshow(I2)
imwrite(I2,'D:\\matlab\\I2.jpg'); %保存缩小为原来1/2的图像
缩小图像为原图像的1/2
img=rgb2gray(I2) %取图像I2的灰度图像 subplot(1,2,1),imshow(img); %水平镜像 [m,n]=size(img); p=1:m;q=1:n;
z(p,n-q+1)=img(p,q);
subplot(1,2,2),imshow(z);
imwrite(z,'D:\\matlab\\z.jpg'); %保存镜像后的图像
镜像后的图像:
实验二
读取一幅彩色图像,并将图像转化为二值图像,在一张图表上,显示原始图像,灰度图像,二值图像。 原图像:
clc; clf; clear;
f=imread('D:\\matlab\\picture.jpg'); %读取D盘中matlab文件夹中名字为picture的格式为jpg的图片
A=im2bw(f); %取图像的二值图像
m=islogical(A) %检测A是否为二值数组,如果是m=1,反之m=0.
img=rgb2gray(f) %取原图像的灰度图像 subplot(1,3,1),imshow(f),title('原图像'); subplot(1,3,2),imshow(img),title('灰度图像'); subplot(1,3,3),imshow(A),title('二值图像');
原图像灰度图像二值图像
实验三
任意选择一幅图像,绘制图像的直方图
clc; clf; clear;
f=imread('D:\\matlab\\picture.jpg'); %读取D盘中matlab文件夹中名字为picture的格式为jpg的图片 %计算灰度图象的直方图数据 L=256; %灰度级
Ps = zeros(L,1); %统计直方图结果数据 nk=zeros(L,1); [row,col]=size(f); n=row*col; %总像素个数 for i = 1:row for j = 1:col
num = double(f(i,j))+1; %获取像素点灰度级 nk(num) = nk(num)+1; %统计nk end end
%计算直方图概率估计 for i=1:L
Ps(i)=nk(i)/n; end figure;
subplot(3,1,1);imshow(f),title('原图');
subplot(3,1,2),plot(nk),title('直方图(nk)'); subplot(3,1,3),plot(Ps),title('直方图(Ps)');
原图4200.20.10x 105直方图(nk)050100150直方图(Ps)200250300050100150200250300
实验四
构造一幅黑白二值图像,在128*128的黑色背景中心产生一个4*4的白色方块,完成下列操作:
(1) 对图像作傅里叶变换,显示频域振幅图像 (2) 对原始图像进行运动模糊,显示其频谱图
%构造一幅黑白二值图像,在128*128的黑色背景中心产生一个4*4的白色方块 clc; clear; L=128;
A=zeros(128,128); for m=63:66
for n=63:1:66; A(m,n)=1; end end clf;
subplot(1,3,1),imshow(A),title('原图像'); %显示该图像 k=fftshift(fft2(A)); s=ifft2(k);
subplot(1,3,2),plot(abs(s)),title('二维傅立叶变换') subplot(1,3,3),imshow(s,[]),title('逆变换后的图像')
二维傅立叶变换10.90.8原图像0.70.60.50.40.30.20.100100200逆变换后的图像
对原始图像‘A’做水平,长度为20像素的匀速直线运动模糊。
原始图像进行运动模糊后的图像
实验五
读入一幅图像,按下列要求完成MATLAB实验 (1) 分别模拟生成运动模糊、散焦模糊图像 (2) 对模糊图像进行逆滤波法和维纳滤波复原 (3) 显示复原结果,比较算法的不同点
clc; clf; clear;
f=imread('D:\\matlab\\picture.jpg'); %读取D盘中matlab文件夹中名字为picture的格式为jpg的图片 len=10; theta=20;
H1=fspecial('motion',len,theta); j=imfilter(f,H1,'circular','conv'); H2= fspecial('disk',10);
I1 = imfilter(f, H2, 'replicate');
figure,subplot(1,3,1),imshow(f),title('原始图像');
subplot(1,3,2),imshow(j),title('进行运动模糊后的图像'); subplot(1,3,3),imshow(I1),title('散焦模糊');
原始图像进行运动模糊后的图像散焦模糊
%维纳处理
psf=fspecial('motion',len,theta); wnr1=deconvwnr(j,psf,0);
figure,subplot(2,2,1),imshow(wnr1); title('运动模糊后的维纳处理'); psf=fspecial('motion',len,theta); wnr1=deconvwnr(I1,psf,0); subplot(2,2,2),imshow(wnr1); title('散焦模糊后的维纳处理'); %对图像进行黑白处理 p1=rgb2gray(j); p2=rgb2gray(I1); %逆滤波处理
[m,n]=size(p1); k=0.0025; for u=1:m
for v=1:n
H(u,v)=exp((-k)*(((u-m/2)^2+(v-n/2)^2)^(5/6))); end end
q1=fftshift(fft2(p1));
r1=abs(ifft2(fftshift(q1)));
subplot(2,2,3),imshow(uint8(r1)),title('运动逆滤波处理'); [m,n]=size(p2); k=0.0025; for u=1:m
for v=1:n
H(u,v)=exp((-k)*(((u-m/2)^2+(v-n/2)^2)^(5/6))); end end
q2=fftshift(fft2(p2));
r2=abs(ifft2(fftshift(q2)));
subplot(2,2,4),imshow(uint8(r2)),title('散焦逆滤波处理');
运动模糊后的维纳处理散焦模糊后的维纳处理运动逆滤波处理散焦逆滤波处理实验证明,当退化图像的噪声较小,即轻度降质时,采用逆滤波恢复的方法可以获得较好的结果。通常,在离频率平面原点较远的地方数值较小或为零,因此图像恢复在原点周围的有限区域内进行,即将退化图像的傅立叶谱在没出现零点而且数值又不是太小的有限范围内。当噪声作用范围很大时,逆滤波不能从噪声中提取图像。