数字图像处理_matlab

来源:互联网 发布:ios11更新不了软件 编辑:程序博客网 时间:2024/05/29 16:52

//读写图像文件

1.imread读入各种图像文件
a=imread(‘e:\1.tif’)

2.imwrite写入各种图像文件
imwrite(a,’e:\1.tif’,’tif’)

3.imfinfo读取图像文件的有关信息
imfinfo(‘e:\1.tif’)

//图像的显示

1.image函数是matlab提供的最原始的图像显示函数,如:
a=[1,2,3,4;4,5,6,7;8,9,10,11];
image(a);

2.imshow函数用于图像文件的显示,如:
i=imread(‘e:\1.tif’);
imshow(i);
title(‘原图像’)%加入图像标题

3.colorbar
colorbar函数用显示图像的颜色条,如:
i=imread(‘e:\1.tif’);
imshow(i);
colorbar;

4.figure
figure函数用于设定图像显示窗口,如:figure(1);/figure(2);

5.subplot
把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。

Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。

6.plot
绘制二维图形
plot(y)
Plot(x.y) xy 可以是向量、矩阵。

//图形类型转换

1.rgb2gray
把真彩图像转换为灰度图像
i=rgb2gray(j)

2.im2bw
通过阈值化方法把图像转换为二值图像
I=im2bw(j,level)
Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围的n%

3.imresize
改变图像的大小

I=imresize(j,[m,n]) 将图像j大小调整为m行n列

//图像运算

1.imadd
两幅图像相加,要求同样大小,同种数据类型
Z=imadd(x,y) 表示图像x+y

2.imsubstract
两幅图像相减,要求同样大小,同种数据类型
Z=imsubtract(x,y) 表示图像x-y

3.immultiply
Z=immultiply(x,y) 表示图像x*y

4.imdivide
Z=imdivide(x,y) 表示图像x/y

//图像的变换

1.fft2——用于数字图像的二维傅里叶变换,如:
i=imread(‘e:\1.tif’);
j=fft2(i);
由于matlab无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。
之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。

2.ifft2
ifft2函数用于数字图像的二维傅里叶反变换,如:
i=imread(‘e:\1.tif’);
j=fft2(i);
k=ifft2(j);

3.fftshift——用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心
B=fftshift(i)

4.利用fft2计算二维卷积
利用fft2函数计算二维卷积,如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
a(8,8)=0;
b(8,8)=0;
c=ifft2(fft2(a).*fft2(b));
c=c(1:5,1:5);
利用conv2(二维卷积函数)校验,如:
a=[8,1,6;3,5,7;4,9,2];
b=[1,1,1;1,1,1;1,1,1];
c=conv2(a,b);


1、读入一副RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成3个子窗口来分别显示RGB图像和灰度图像,注上文字标题。
a=imread(‘e:\junning.jpg’);
i=rgb2gray(a);
I=im2bw(a,0.5);
subplot(1,3,1);imshow(a);title(‘原图像’);
subplot(1,3,2);imshow(i);title(‘灰度图像’);
subplot(1,3,3);imshow(I);title(‘二值图像’);

2、对两幅不同图像执行+、-、*、/ 操作,在同一个窗口内分成5个子窗口来分别显示,注上文字标题。
a=imread(‘e:\junning.jpg’);
A=imresize(a,[800 800]);
b=imread(‘e:\junning2.jpg’);
B=imresize(b,[800 800]);
Z1=imadd(A,B);
Z2=imsubtract(A,B);
Z3=immultiply(A,B);
Z4=imdivide(A,B);

subplot(1,3,1);imshow(A);title(‘原图像A’);
subplot(1,3,2);imshow(B);title(‘原图像B’);
subplot(1,3,3);imshow(Z1);title(‘加法图像’);
subplot(1,3,4);imshow(Z2);title(‘减法图像’);
subplot(1,3,5);imshow(Z3);title(‘乘法图像’);
subplot(1,3,6);imshow(Z2);title(‘除法图像’);

3、对一副图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成4个子窗口来分别显示,注上文字标题。

a=imread(‘e:\1.tif’);
m=imadjust(a,[,],[0.5;1]); %图像变亮
n=imadjust(a,[,],[0;0.5]); %图像变暗
g=255-a; %负片效果
subplot(2,2,1);imshow(a);title(‘原图像’);
subplot(2,2,2);imshow(m);title(‘图像变亮’);
subplot(2,2,3);imshow(n);title(‘图像变暗’);
subplot(2,2,4);imshow(g);title(‘负片效果’);

4、对一副图像进行平移,显示原始图像与处理后的图像,分别对其进行傅里叶变换,显示变换后的效果,分析原图的傅里叶谱与平移后的傅里叶频谱的对应关系。

s=imread(‘e:\yuanyuan.jpg’); %读入原图像
i=rgb2gray(s);
i=double(i);
j=fft2(i); %傅里叶变换
k=fftshift(j); %直流分量移到频谱中心
l=log(abs(k)); %对数变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=image(m); %取傅里叶变换的需部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))/(max(max(A)))*255; %归一化
b=circshift(s,[800 450]); %对图像矩阵im中的数据进行移位操作
b=rgb2gray(b);
b=double(b);
c=fft2(b);
e=fftshift(c);
l=log(abs(e));
f=fftshift(c);
WW=real(f);
ZZ=image(f);
B=sqrt(WW.^2+ZZ.^2);
B=(B-min(min(B)))/(max(max(B)))*255;

subplot(2,2,1);imshow(s);title(‘原图像’);
subplot(2,2,2);imshow(uint8(b));title(‘平移图像’);
subplot(2,2,3);imshow(A);title(‘离散傅里叶频谱’);
subplot(2,2,4);imshow(B);title(‘平移图像离散傅里叶频谱’);

5、对一副图像进行旋转,显示原始图像与处理后的图像,分别对其进行傅里叶变换,显示变换后的效果,分析原图的傅里叶谱与平移后的傅里叶频谱的对应关系。

s=imread(‘e:\lunmei.jpg’); %读入原图像
i=rgb2gray(s);
i=double(i);
j=fft2(i); %傅里叶变换
k=fftshift(j); %直流分量移到频谱中心
l=log(abs(k)); %对数变换
m=fftshift(j); %直流分量移到频谱中心
RR=real(m); %取傅里叶变换的实部
II=image(m); %取傅里叶变换的需部
A=sqrt(RR.^2+II.^2); %计算频谱府幅值
A=(A-min(min(A)))/(max(max(A)))*255; %归一化
b=imrotate(s,-90); %对图像矩阵im中的数据进行移位操作
b=rgb2gray(b);
b=double(b);
c=fft2(b);
e=fftshift(c);
l=log(abs(e));
f=fftshift(c);
WW=real(f);
ZZ=image(f);
B=sqrt(WW.^2+ZZ.^2);
B=(B-min(min(B)))/(max(max(B)))*255;

subplot(2,2,1);imshow(s);title(‘原图像’);
subplot(2,2,2);imshow(uint8(b));title(‘平移图像’);
subplot(2,2,3);imshow(A);title(‘离散傅里叶频谱’);
subplot(2,2,4);imshow(B);title(‘平移图像离散傅里叶频谱’);

原创粉丝点击