练习一 常用MATLAB图像处理命令
一、练习目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
二、练习环境
Windows操作系统
Matlab 6.5或以上应用软件
三、练习内容
1、图像文件的读写
(1)imread函数用来实现图像文件的读取。 输入以下程序:
A=imread(\'文件名.扩展名\');%用imread函数来读入图像 注:设置路径 imshow(A);%用imshow函数来显示图像 得到的结果如图:
(2)imfinfo函数用来查询图像文件信息。 输入以下程序:
info=imfinfo(\'文件名.扩展名\');% 用imfinfo函数查询图像文件信息 得到: info =
Filename: \'文件名.扩展名\'
(4)imshow函数用来显示图像。
刚才介绍imread函数时已使用此函数。
(5)colorbar函数将颜色条添加到坐标轴对象中。 输入以下程序:
RGB=imread(\'***\');%图像读入
I=rgb2gray(RGB);%把RGB图像转换成灰度图像
imshow(I),colorbar(\'vert\')% 将颜色条添加到坐标轴对象中
得到如图:
2、图像处理的基本操作
一、图像代数运算
(1)imadd函数实现两幅图像的相加或者给一幅图像加上一个常数。 给图像每个像素都增加亮度的程序如下: I=imread(\'***\'); J=imadd(I,100);%给图像增加亮度 subplot(1,2,1),imshow(I) %填充 subplot(1,2,2),imshow(J) 结果如图5。
(2)imsubtract函数实现从一幅图像中减去一个常数。 输入以下程序实现从一幅图像中减去一个常数:
(3)immultiply实现两幅图像的相乘或者一幅图像的亮度缩放(图像乘以小于1或大于1的参数,比较效果)。 输入以下程序:
(4)imdivide函数实现两幅图像的除法或一幅图像的亮度缩放。 输入以下程序:
二、图像的空间域操作
(1)imrotate函数实现图像的旋转。 输入以下程序: I=imread(\'***\'); J=imrotate(I,45);%对图像进行旋转 subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J); 得到图:
练习二 数字图像处理的基本操作
一、练习目的
1、练习使用MATLAB工具进行数字图像处理;
2、实现图像的边缘提取、滤波、直方图修正等操作。
二、练习环境
Windows操作系统
Matlab 6.5或以上应用软件
三、练习内容
(1)imresize函数实现图像的缩放。 输入以下程序:
J=imread(\'文件名.扩展名\'); X1=imresize(J,2);%对图像进行缩放 figure,imshow(J) 结果如图
(2)imcrop函数实现图像的剪切。 输入以下程序: I=imread(\'***\'); I2=imcrop(I);%对图像进行剪切 subplot(填充),imshow(填充); subplot(填充),imshow(填充); 如图:
图像变换
(1)fft2函数和ifft2函数分别是计算二维的FFT和反变换。 输入以下程序: f=zeros(100,100); f(20:70,40:60)=1; imshow(f); F=fft2(f);% 计算二维的FFT F2=log(abs(F));%对幅值取对数 imshow(F2),colorbar
(2)dct2函数采用基于FFT的算法,用于实现较大输入矩阵的离散余弦变换。与之对应,idct2函数实现图像的二维逆离散余弦变换 输入以下程序: RGB=imread(\'***\'); I=rgb2gray(RGB); J=dct2(I);% 对I进行离散余弦变换 imshow(log(abs(J))),colorbar J(abs(J)
(3)edge函数用于提取图像的边缘。 输入以下程序:
RGB=imread(\'drum.bmp\'); I=rgb2gray(RGB); BW=edge(I);% 提取图像的边缘 imshow(I),figure,imshow(BW); 得到图
图像增强、分割和编码
(1)imhist函数产生图像的直方图。 A=imread(\'drum.bmp\');%读入图像
B=rgb2gray(A);%把RGB图像转化成灰度图像 imshow(B);%显示灰度图像
imhist(B)%显示灰度图像的直方图 得到图
(2)histeq函数用于对图像的直方图均衡化。 接上面程序:
C=histeq(B);%对图像B进行均衡化 imshow(C);%显示图像
imhist(C);%得到均衡化后的灰度直方图 得到如图
filter2函数实现均值滤波。 输入以下程序:
a=imread(\'noise.drum.jpg\'); I=rgb2gray(a); imshow(I); K1=filter2(fspecial(\'average\',3),I)/255; % 33的均值滤波 K2=补充;
% 55的均值滤波 K3=补充;
% 77的均值滤波 figure,imshow(K1); figure,imshow(K2); figure,imshow(K3); 得到图
(5)medfilt2函数实现中值滤波。 输入以下程序:
自查函数如何使用,并编程: 结果如图:
练习三
图像采样及图像类型转换
一、练习目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、试对自选图像分别进行4和16倍剪采样,查看其剪采样效果
3、将所给图,转换成256级灰度图像,8级灰度图像和2值图像
二、练习环境
MATLAB 6.5或以上版本、WIN XP或以上计算机
三、练习内容
使用MATLAB,对图像进行减采样。
a = imread(\'***.JPG\'); b = rgb2gray(a); [wid,hei]=size(b); %4倍减抽样
quartimg = zeros(wid/2+1,hei/2+1); i1 = 1; j1 = 1; for i=1:2:wid
for j=1:2:hei
quartimg(i1,j1) = b(i,j);
j1 = j1 + 1;
end i1 = i1 + 1; j1 = 1; end figure
imshow(uint8(quartimg)) 练习结果如图
%16倍减抽样
编程并运行显示图像结果:
图像类型
1、练习内容
试将自选图,转换成256级灰度图像,8级灰度图像和2值图像
2、练习方法及程序
使用MATLAB,进行图像类型变换。
a = imread(\'***.jpg\'); b = rgb2gray(a);
figure imshow(b) [wid,hei]=size(b); img8 = zeros(wid,hei); img2 = zeros(wid,hei); for i=1:wid
for j=1:hei
img8(i,j) = floor(b(i,j)/32);%得到8级灰度图像
end end figure
imshow(uint8(img8),[0,7]) for i=1:wid
for j=1:hei
补充; end end figure
imshow(uint8(img8),[0,2]) %得到2值图像
练习结果如图
练习四
数字图像的空间域处理
一、练习目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、熟悉图像相加的方法及效果
3、熟悉图像灰度扩展的方法及效果
4、熟悉图像缩放、旋转的方法及效果
二、练习环境
MATLAB 6.5或以上版本、WIN XP或以上计算机
三、练习内容 Part 1 (1)选择一幅图像***.jpg,设置输入输出变换的灰度级范围,a=0.3, b=0.6, c=0.1, d=0.9;
(2)设置非线性扩展函数的参数c=2;
(3)采用灰度倒置变换函数s=255-r进行图像变换;
(4)设置二值化图像的阈值,分别为level=0.4,level=0.7参考程序如下: I=imread(\'***.jpg\'); figure; subplot(1,3,1); imshow(I); title(\'原图\'); J=imadjust(I,[0.3;0.6],[0.1;0.9]); %设置灰度变换的范围 subplot(1,3,2); imshow(J); title(\'线性扩展\'); I1=double(I); %将图像转换为double类型 I2=I1/255; %归一化此图像 C=2; K=C*log(1+I2); %求图像的对数变换 subplot(1,3,3); imshow(K); title(\'非线性扩展\'); M=255-I; %将此图像取反 figure; subplot(1,3,1); imshow(M); title(\'灰度倒置\'); N1=im2bw(I,0.4); %将此图像二值化,阈值为0.4 N2=im2bw(I,0.7); %将此图像二值化,阈值为0.7 subplot(1,3,2); imshow(N1); title(\'二值化阈值0.4\'); subplot(1,3,3); imshow(N2); title(\'二值化阈值0.7\'); 练习结果与分析
(1) 练习结果如图3.7所示。
Part 2 读取一幅图片,如***.jpg,设置图像旋转的角度分别为450和900,采用图形旋转函数imrotate对图像进行旋转。程序如下,结果如图3.10。
I=imread(\'i_lena.jpg\'); J=imrotate(I,45); %图像进行逆时针旋转,默认采用最近邻法进行插值处理 K=imrotate(I,90); %默认旋转出界的部分不被截出 subplot(1,3,1); imshow(I); subplot(1,3,2); imshow(J); subplot(1,3,3); imshow(K); 练习结果与分析
(1)练习结果如图3.10所示。
练习五 数字图像的频域处理
一、练习目的
1、熟悉并掌握MATLAB工具的使用;
2、实现图像离散傅里叶变换并观察效果
3、实现图像离散余弦变换并观察效果
二、练习环境
Windows操作系统 Matlab 6.5或以上应用软件
三、练习内容 Part 1 选取一幅图像,进行离散傅里叶变换,再对其分别进行X轴与Y轴上的平移,得其离散傅里叶变换,观察三幅结果图。
I=imread(\'1.bmp\'); figure(1) imshow(real(I)); I=I(:,:,3); fftI=fft2(I); sfftI=fftshift(fftI); %求离散傅里叶频谱
%对原始图像进行二维傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdp1=real(sfftI); IIfdp1=imag(sfftI); a=sqrt(RRfdp1.^2+IIfdp1.^2); a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure(2) imshow(real(a)); 练习结果与分析
Part 2 选取一幅图像,进行离散傅里叶变换,再对其进行一定角度的旋转,进行离散傅里叶变换。
%构造原始图像
I = zeros(256,256);
I(88:168,124:132) = 1; %图像范围是256*256,前一值是纵向比,后一值是横向比 imshow(I)
%求原始图像的傅里叶频谱
J = fft2(I); F = abs(J); J1 = fftshift(F);figure imshow(J1,[5 50])
%对原始图像进行旋转
J = imrotate(I,90,\'bilinear\',\'crop\'); figure imshow(J) %求旋转后图像的傅里叶频谱
J1 = fft2(J); F = abs(J1); J2 = fftshift(F);figure imshow(J2,[5 50]) 练习结果与分析
1) 练习结果如图4.4所示.
Part 3 选取一幅图像,进行离散余弦变换,并对其进行离散余弦反变换,观察其结果。
%对***.jpg文件计算二维DCT变换 RGB = imread(\'***.jpg \'); figure(1) imshow(RGB) I = rgb2gray(RGB); %真彩色图像转换成灰度图像 J = dct2(I); %计算二维DCT变换 figure(2) imshow(log(abs(J)),[]) %图像大部分能量集中在上左角处 figure(3); J(abs(J)