数字图像处理MATLAB指令.docx
《数字图像处理MATLAB指令.docx》由会员分享,可在线阅读,更多相关《数字图像处理MATLAB指令.docx(19页珍藏版)》请在冰豆网上搜索。
数字图像处理MATLAB指令
其他常用的图像转换函数有:
gray2ind函数,将灰度图像转换成索引图像。
Im2bw函数,将其它图像转化为二值图像。
Ind2gray函数,将索引图像转换成灰度图像。
Rgb2gray函数,将彩色图像转换成灰度图像。
1.利用imread()函数读取一幅图像,存入一个数组中;
2.利用whos命令提取该读入图像flower.tif的基本信息;
3.利用imshow()函数来显示这幅图像;
函数执行语句
A=imread('saturn.png');
whos
NameSizeBytesClassAttributes
A1500x1200x3uint8
imshow(A)
4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;
imfinfo('saturn.png')
5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:
imwrite(原图像,新图像,‘quality’,q),q取0-100。
imwrite(A,'xingxing.jpg','quality',25)
B=imread('xingxing.jpg');
6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。
imwrite(A,'xingxing.bmp')
C=imread('xingxing.bmp');
7.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
F=imread('circbw.tif');
im2bw(F)
imshow(F)
实验二图像直方图与灰度变换
下面给出灰度变化的MATLAB程序
f=imread('medicine_pic.jpg');
g=imhist(f,256);%显示其直方图
g1=imadjust(f,[01],[10]);%灰度转换,实现明暗转换(负片图像)
figure,imshow(g1)
g2=imadjust(f,[0.50.75],[01]);%将0.5到0.75的灰度级扩展到范围[01]
figure,imshow(g2)
g=imread('point.jpg');
h=log(1+double(g));%对输入图像对数映射变换
h=mat2gray(h);%将矩阵h转换为灰度图片
h=im2uint8(h);%将灰度图转换为8位图
figure,imshow(h)
下面给出直方图均衡化增强图像对比度的MATLAB程序:
I=imread(‘pollen.jpg);%读入原图像
J=histeq(I);%对原图像进行直方图均衡化处理
Imshow(I);%显示原图像
Title(‘原图像’);%给原图像加标题名
Figure;imshow(J);%显示直方图均衡化后的图像
Title(‘直方图均衡化后的图像’);%给直方图均衡化后的图像加标题名
Figure;subplot(1,2,1);%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图
Imhist(I,64);%将原图像直方图显示为64级灰度
Title(‘原图像直方图’);%给原图像直方图加标题名
Subplot(1,2,2);%作第2幅子图
Imhist(J,64);%将均衡化后图像的直方图显示为64级灰度
Title(‘均衡变换后的直方图’);%给均衡化后图像直方图加标题名
1、利用自己编写的灰度直方图计算程序计算rice.tif图像的直方图,并与系统自带的计算程序进行对比。
A=imread('rice.png');
subplot(1,3,1);
imshow(A)
title('lady-rice');
[m,n]=size(A);
e=zeros(1,256);
fork=0:
255
fori=1:
m
forj=1:
n
ifA(i,j)==k
e(k+1)=e(k+1)+1;
end
end
end
end
subplot(1,3,2);
bar(e);
subplot(1,3,3);
imhist(A,256);
2.进行灰度直方图的均衡化。
I=imread('cameraman.tif');
J=histeq(I);
figure;
imshow(I);
title('原图像');
figure;
imshow(J);
title('直方图均衡化后的图像');
figure;
Imhist(J,64);
title('均衡变化后的直方图');
3、利用直接灰度变换法对图像进行灰度变换
f=imread('rice.png');
figure;
imshow(f);
title('原始图像');
figure;
imhist(f,256);
title('原始图像直方图');
f1=imadjust(f,[01],[10]);%灰度转换,实现明暗转换(负片图像)
figure;
imshow(f1);
title('明暗转换后的图像');
figure;
imhist(f1,256);
title('明暗转换直方图');
f2=imadjust(f,[0.50.75],[01]);%将0.5到0.75的灰度级扩展到范围[01]
figure;
imshow(f2);
title('0.5到0.75的灰度级扩展到范围[01]的图像');
figure;
imhist(f2,256);
title('灰度级扩展直方图');
实验三图像的算术运算与空间域增强
使用与图像算数运算的MATLAB程序
f1=imread('picture.jpg');%读入图像1
f2=imread('picture1.jpg');%读入图像2
I=imsubtract(f1,f2);%两幅图像相减,结果得出两幅图像的不同之处
figure,imshow(I)
利用MATLAB软件实现空域滤波的程序:
I=imread('electric.tif');
J=imnoise(I,'gauss',0.02);%添加高斯噪声
%J=imnoise(I,'salt&pepper',0.02);%添加椒盐噪声
ave1=fspecial('average',3);%产生3×3的均值模版
ave2=fspecial('average',5);%产生5×5的均值模版
K=filter2(ave1,J)/255;%均值滤波3×3
L=filter2(ave2,J)/255;%均值滤波5×5
M=medfilt2(J,[33]);%中值滤波3×3模板
N=medfilt2(J,[55]);%中值滤波5×5模板
imshow(I);
figure,imshow(J);
figure,imshow(K);
figure,imshow(L);
figure,imshow(M);
figure,imshow(N);
1.调入并显示摄像头生成的二幅的图像。
obj=videoinput('winvideo',1,'YUY2_640x480');%创建视频输入对象
preview(obj);%´打开视频预览窗口
frame1=getsnapshot(obj);%获取视频的一帧(注该帧并不是RGB格式)
figure,imshow(frame1);%显示获取的那帧图像
frame=ycbcr2rgb(frame1);%图像格式转换
figure,imshow(frame);%显示图像
imwrite(frame,1.jpg','jpg');
frame1=getsnapshot(obj);
figure,imshow(frame1);
frame=ycbcr2rgb(frame1);
figure,imshow(frame);
imwrite(frame,2.jpg','jpg');
2.考虑使用适当的图像算术运算方法,找出二幅图像中不同的地方及其所处的位置;
f1=imread(1.jpg');
f2=imread(2.jpg');
I=imsubtract(f1,f2);
figure,imshow(I)
3.显示/记录处理结果并做出报告。
a)调入并显示原始图像Sample2-1.jpg。
A=imread('huangs.jpg');
C=rgb2gray(A);
figure,imshow(C);
b)利用imnoise命令在图像Sample2-1.jpg上加入高斯(gaussian)噪声
B=imnoise(C,'gauss',0.1);
figure,imshow(B);
title('加噪后');
c)利用预定义函数fspecial命令产生平均(average)滤波器
d=(1/17).*[111;191;111];
Y=filter2(d,B)/255;
figure,imshow(Y,[]);
title('均值去噪后');
d)采用3x3的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;
M=medfilt2(B,[3,3]);
figure,imshow(M);
title('中值去噪后');%中值滤波3×3模板
e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。
ave2=fspecial('average',5);%产生5×5的均值模版
L=filter2(ave2,B)/255;%均值滤波5×5;
%Y=filter2(d,B)/255;
figure,imshow(L,[]);
M=medfilt2(B,[5,5]);
figure,imshow(M);
title('中值去噪后');%中值滤波5*5模板
f)利用imnoise命令在图像Sample2-1.jpg上加入椒盐噪声(salt&pepper)
g)重复c)~e)的步骤
h)输出全部结果并进行讨论。
A=imread('huangs.jpg');
C=rgb2gray(A);
subplot(3,2,1);
imshow(C);
B=imnoise(C,'salt&pepper',0.02);
subplot(3,2,2);
imshow(B);
title('加噪后');
d=fspecial('average',3);
M=medfilt2(B,[3,3]);
subplot(3,2,3);
imshow(M);
title('中值去噪后[3,3]');
N=medfilt2(B,[5,5]);
subplot(3,2,4);
imshow(N);
title('中值去噪后[5,5]');
Y=filter2(d,B)/255;
subplot(3,2,5);
imshow(Y,[]);
title('均值去噪后[3,3]');
ave2=fspecial('average',5);%产生5×5的均值模版
L=filter2(ave2,B)/255;%均值滤波5×5;
subplot(3,2,6);
imshow(L,[]);
title('均值去噪后[5,5]');
实验四图像的傅立叶变换与频域滤波
利用MATLAB软件实现数字图像傅立叶变换的程序:
I=imread(‘原图像名.gif’);%读入原图像文件
imshow(I);%显示原图像
fftI=fft2(I);%二维离散傅立叶变换
sfftI=fftshift(fftI);%直流分量移到频谱中心
RR=real(sfftI);%取傅立叶变换的实部
II=imag(sfftI);%取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2);%计算频谱幅值
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225;
%归一化
figure;%设定窗口
imshow(A);%显示原图像的频谱
利用MATLAB实现频域滤波的程序
f=imread('room.tif');
F=fft2(f);%对图像进行傅立叶变换
S=fftshift(log(1+abs(F)));%对变换后图像进行队数变化,并对其坐标平移,使其中心化
S=gscale(S);%将频谱图像标度在0-256的范围内
imshow(S)%显示频谱图像
h=special('sobel');%产生空间‘sobel’模版
freqz2(h)%查看相应频域滤波器的图像
PQ=paddedsize(size(f));%产生滤波时所需大小的矩阵
H=freqz2(h,PQ
(1),PQ
(2));%产生频域中的‘sobel’滤波器
H1=ifftshift(H);%重排数据序列,使得原点位于频率矩阵的左上角
imshow(abs(H),[])%以图形形式显示滤波器
figure,imshow(abs(H1),[])
gs=imfilter(double(f),h);%用模版h进行空域滤波
gf=dftfilt(f,H1);%用滤波器对图像进行频域滤波
figure,imshow(gs,[])
figure,imshow(gf,[])
figure,imshow(abs(gs),[])
figure,imshow(abs(gf),[])
f=imread('number.tif');%读取图片
PQ=paddedsize(size(f));%产生滤波时所需大小的矩阵
D0=0.05*PQ
(1);%设定高斯高通滤波器的阈值
H=hpfilter('gaussian',PQ
(1),PQ
(2),D0);%产生高斯高通滤波器
g=dftfilt(f,H);%对图像进行滤波
figure,imshow(f)%显示原图像
figure,imshow(g,[])%显示滤波后图像
一、实验步骤
1.生成如下图所示的一个二维矩形信号。
H=zeros(256,256);
H(63:
192,63:
192)=1;
figure;imshow(H);
title('lvboqi');
2.利用一维FFT计算二维付里叶变换。
分别显示行计算结果和列变换结果。
(立体结果,用mesh(F)显示)
I=imread('cameraname.bmp');
figure;imshow(I);
title('原图像');
F1=fft2(I);
C1=ifft2(F1);
figure;imshow(log(1+abs(C1)),[]);
title('2滤波后图像');
figure;mesh(C1);
F2=fft(I);
F3=fft(F2')';
C3=ifft(F3')';
C2=ifft(C3);
figure;imshow(log(1+abs(C2)),[]);
title('1/1滤波后图像');
figure;mesh(log(1+abs(C2)));
3利用MatLab工具箱中的函数编制FFT频谱显示的函数;
4a).调入、显示“实验一”获得的图像;图像存储格式应为“.gif”;
b)对这三幅图像做FFT并利用自编的函数显示其频谱;
c)讨论不同的图像内容与FFT频谱之间的对应关系。
5利用MATLAB提供的低通滤波器实现图像信号的滤波运算,并与空间滤波进行比较。
I=imread('cameraname.bmp');%读入原图像文件
figure;imshow(I);%显示原图像
title('原图像');
[M,N]=size(I);
F=fft2(I);
A=fftshift(F);%直流分量移到频谱中心
%figure;imshow(A);
H=zeros(M,N);
H(63:
192,63:
192)=1;
figure;imshow(H);
title('低通滤波器');
B=A.*H;
C=ifft2(B);
figure;imshow(log(1+abs(C)),[]);
title('滤波后');
6利用MATLAB提供的高通滤波器对图像进行处理。
I=imread('cameraname.bmp');
figure;imshow(I);%显示原图像
title('原图像');
J=imnoise(I,'gauss',0.02);%添加高斯噪声
%J=imnoise(I,'salt&pepper',0.02);%添加椒盐噪声
figure;imshow(J);%显示原图像
title('噪声图像');
[M,N]=size(J);
A=fft2(J);
%figure;imshow(A);
H=ones(M,N);
H(63:
192,63:
192)=0;
figure;imshow(H);
title('高通滤波器');
B=A.*H;
C=ifft2(B);
figure;imshow(log(1+abs(C)),[]);
title('滤波后');