找回密码
 立即注册
查看: 187|回复: 0

matlab数字图像处理实验报告

[复制链接]
发表于 2022-5-17 20:41 | 显示全部楼层 |阅读模式
实验一  常用MATLAB图像处理命令
一、实验目的
   1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读取、显示、代数运算和简单变换。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、常用函数

  • 读写图像文件
1  imread
    imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif')
    2  imwrite
    imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',’tif’)
    3  imfinfo
    imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif')

  • 图像的显示
1  image
    image函数是MATLAB提供的最原始的图像显示函数,如:
    a=[1,2,3,4;4,5,6,7;8,9,10,11,12];
    image(a);
    2  imshow
    imshow函数用于图像文件的显示,如:
    i=imread('e:\w01.tif');
imshow(i);
title(‘原图像’)%加上图像标题
    3 colorbar
    colorbar函数用显示图像的颜色条,如:
    i=imread('e:\w01.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、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。
a=imread('f:\1.jpg')
i = rgb2gray(a)
I = im2bw(a,0.5)
subplot(3,1,1);imshow(a);title('原图像')
subplot(3,1,2);imshow(i);title('灰度图像')
subplot(3,1,3);imshow(I);title('二值图像')



2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。
a=imread('f:\1.jpg')
A=imresize(a,[800 800])
b=imread('f:\2.jpg')
B=imresize(b,[800 800])
Z1=imadd(A,B)
Z2=imsubtract(A,B)
Z3=immultiply(A,B)
Z4=imdivide(A,B)
subplot(3,2,1); imshow(A);title('原图像A')
subplot(3,2,2); imshow(B);title('原图像B')
subplot(3,2,3); imshow(Z1);title('加法图像')
subplot(3,2,4); imshow(Z2);title('减法图像')
subplot(3,2,5); imshow(Z3);title('乘法图像')
subplot(3,2,6); imshow(Z2);title('除法图像')




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

a=imread('f:\1.jpg');
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、熟悉数字图像处理常用函数的使用,调出帮助文档查看其各种不同用法。
方法:选择函数(函数所在区变暗),点右键弹出菜单,选择“Help on Selection”

五、实验总结

分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。

实验四   常用图像增强方法
一、实验目的
   1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像的增强技术。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关知识
    1 imnoise
  imnoise函数用于对图像生成模拟噪声,如:
    i=imread('e:\w01.tif');
j=imnoise(i,'gaussian',0,0.02);模拟均值为0方差为0.02的高斯噪声,
j=imnoise(i,'salt&pepper', 0.04) 模拟叠加密度为0.04的椒盐噪声
    2 fspecial
fspecial函数用于产生预定义滤波器,如:
    h=fspecial('sobel');%sobel水平边缘增强滤波器
    h=fspecial('gaussian');%高斯低通滤波器
    h=fspecial('laplacian');%拉普拉斯滤波器
    h=fspecial('log');%高斯拉普拉斯(LoG)滤波器
    h=fspecial('average');%均值滤波器
3 基于卷积的图像滤波函数
imfilter函数, filter2函数,二维卷积conv2滤波,都可用于图像滤波,用法类似,如:
    i=imread('e:\w01.tif');
    h=[1,2,1;0,0,0;-1,-2,-1];%产生Sobel算子的水平方向模板
j=filter2(h,i);
或者:
h = fspecial(‘prewitt’)
I = imread('cameraman.tif');
imshow(I);
H = fspecial('prewitt‘); %预定义滤波器
M = imfilter(I,H);
imshow(M)
或者:
    i=imread('e:\w01.tif');
    h=[1,1,1;1,1,1;1,1,1];
    h=h/9;
    j=conv2(i,h);
4 其他常用滤波举例
(1)中值滤波
  medfilt2函数用于图像的中值滤波,如:
    i=imread('e:\w01.tif');
    j=medfilt2(i,[M N]);对矩阵i进行二维中值滤波,领域为M*N,缺省值为3*3
    (2)利用拉氏算子锐化图像, 如:
    i=imread('e:\w01.tif');
    j=double(i);
    h=[0,1,0;1,-4,0;0,1,0];%拉氏算子
k=conv2(j,h,'same');

三、实验步骤

1、采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波,窗口分别采用3*3,5*5,7*7
I = imread('f:\lena.png');
J = imnoise(I,'salt & pepper',0.04);
K1 = medfilt2(J,[3 3]);%对矩阵i进行二维中值滤波,领域为3*3
K2 = medfilt2(J,[5 5]);
K3 = medfilt2(J,[7 7]);
subplot(2,2,1);imshow(J);title('椒盐噪声干扰图像')
subplot(2,2,2);imshow(K1);title('领域为3*3二维中值滤波')
subplot(2,2,3);imshow(K2);title('领域为5*5二维中值滤波')
subplot(2,2,4);imshow(K3);title('领域为7*7二维中值滤波')



2、采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
I = imread('f:\lena.png');
j=imnoise(i,'gaussian',0,0.02);%模拟均值为0方差为0.02的高斯噪声,
M= filter2(fspecial('average',9),J)/255; %模板尺寸为9
subplot(2,1,1);imshow(j);title('噪声干扰图像')
subplot(2,1,2);imshow(M);title('改进后的图像')




  • 采用三种不同算子对图像进行锐化处理。
i=imread('f:\1.jpg')
I=rgb2gray(s)
H=fspecial('sobel')%应用Sobel算子锐化图像
I1=filter2(H,I)%Sobel算子滤波锐化
H=fspecial('prewitt')%应用prewitt算子锐化图像
I2=filter2(H,I)%prewitt算子滤波锐化
H=fspecial('log')%应用log算子锐化图像
I3=filter2(H,I)%log算子滤波锐化
subplot(2,2,1);imshow(i);title('原图像')
subplot(2,2,2);imshow(I1);title('Sobel算子锐化图像')
subplot(2,2,3);imshow(I2);title('prewitt算子锐化图像')
subplot(2,2,4);imshow(I3);title('log算子锐化图像')



四、实验总结

1、比较不同平滑滤波器的处理效果,分析其优缺点

2、比较不同锐化滤波器的处理效果,分析其优缺点

实验五   图像恢复和图像分割
一、实验目的
   1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像的恢复和分割技术。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关知识
1 deconvwnr
维纳滤波,
用法:J = deconvwnr(I,PSF,NSR)
用维纳滤波算法对图片I进行图像恢复后返回图像J。 I是一个N维数组。PSF是点扩展函数的卷积。NSP是加性噪声的噪声对信号的功率比。
如:
I = im2double(imread('cameraman.tif'));
imshow(I);
title('Original Image ');
%模拟运动模糊 Matlab中文论坛
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
figure, imshow(blurred)
%恢复图像http://www.iLoveMatlab.cn
wnr2 = deconvwnr(blurred_noisy, PSF);
figure, imshow(wnr2)
title('Restoration of Blurred')
2 edge
检测灰度或者二值图像的边缘,返回一个二值图像,1像素是检测到的边缘,0像素是非边缘。
用法:BW = edge(I,'sobel',thresh,direction),
I为检测对象;边缘检测算子可用sobel,roberts,prewitt,zerocross,log,canny;
thresh指定阈值,检测时忽略所有小于阈值的边缘,默认自动选择阈值;direction方向,在所指定的方向direction上,用 算子进行边缘检测horizontal(水平方向)、vertical(垂直方向)或both(两个方向)。
如:I = imread('circuit.tif');
BW1 = edge(I,'prewitt');
imshow(BW1);
3 strel
创建形态学结构元素。
用法:
SE = STREL('arbitrary',NHOOD,HEIGHT) 创建一个指定领域的非平面结构化元素。HEIGHT是一个矩阵,大小和NHOOD相同,他指定了NHOOD中任何非零元素的高度值。
SE = STREL('ball',R,H,N) 创建一个空间椭球状的结构元素,其X-Y平面半径为R,高度为H。R必须为非负整数,H是一个实数。N必须为一个非负偶数。当N>0时此球形结构元素由一系列空间线段结构元素来近似。
SE = STREL('diamond',R) 创建一个指定大小R平面钻石形状的结构化元素。R是从结构化元素原点到其点的距离,必须为非负整数。
SE = STREL('disk',R,N) 创建一个指定半径R的平面圆盘形的结构元素。这里R必须是非负整数. N须是0, 4, 6, 8.当N大于0时,圆盘形结构元素由一组N(或N+2)个周期线结构元素来近似。当N等于0时,不使用近似,即结构元素的所有像素是由到中心像素距离小于等于R的像素组成。N可以被忽略,此时缺省值是4。注: 形态学操作在N>0情况下要快于N=0的情形。
如:
se1 = strel('square',11) % 11乘以11的正方形
4 imerode
腐蚀图像
用法:IM2 = imerode(IM,SE)  
腐蚀灰度、二进制或压缩二进制图像 IM ,返回腐蚀图像 IM2 。参数 SE 是函数 strel 返回的一个结构元素体或是结构元素体阵列。
如:使用一个盘状结构元素腐蚀一幅二进制图像。
originalBW = imread('circles.png');
se = strel('disk',11);
erodedBW = imerode(originalBW,se);
imshow(originalBW), figure, imshow(erodedBW)
5 imdilate
膨胀图像
用法:IM2 = imdilate(IM, SE)
膨胀灰度图像、二值图像、或者打包的二值图像IM,返回膨胀图像M2。变量SE是一个结构元素或者一个结构元素的数组,其是通过strel函数返回的。
如:利用一个运行结构元素膨胀灰度图像。
I = imread('cameraman.tif');
se = strel('ball',5,5);
I2 = imdilate(I,se);
imshow(I), title('Original')
figure, imshow(I2), title('Dilated')

三、实验步骤
1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。
i=imread('f:\1.jpg')
I=rgb2gray(s)
I = im2double(I);
%模拟运动模糊
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
%恢复图像
wnr2 = deconvwnr(blurred, PSF);
subplot(1,2,1);imshow(blurred);title('运动模糊图像')  
subplot(1,2,2);imshow(wnr2);title('恢复图像')




  • 采用三种不同算子检测图像边缘,显示结果。
i=imread('f:\1.jpg')
BW1 = edge(I,'prewitt');
BW2 = edge(I,'zerocross');
BW3 = edge(I,'canny');
subplot(2,2,1);imshow(i);title('原图像')
subplot(2,2,2);imshow(BW1);title('prewitt边缘图')
subplot(2,2,3);imshow(BW2);title('zerocross边缘图')
subplot(2,2,4);imshow(BW3);title('canny边缘图')



3、对二值图像分别进行方形模板3*3和5*5的膨胀和腐蚀操作,显示结果。
a=imread('f:\1.jpg')
i = rgb2gray(a)
I = im2bw(a,0.5)
se3 = strel('disk',3);
erodedBW1 = imerode(I,se3);
se4 = strel('disk',5);
erodedBW2 = imerode(I,se4);
se1 = strel('ball',3,3);
I1 = imdilate(a,se1);
se2 = strel('ball',5,5);
I2 = imdilate(a,se2);
subplot(2,2,1);imshow(I1);title('3*3膨胀图像')
subplot(2,2,2);imshow(I2);title('5*5膨胀图像')
subplot(2,2,3);imshow(erodedBW1);title('3*3腐蚀图像')
subplot(2,2,4);imshow(erodedBW2);title('5*5腐蚀图像')



实验六   图像处理实际应用
一、实验目的
1、熟悉并掌握MATLAB图像处理工具箱的使用;
2、理解并掌握常用的图像处理技术。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、实验内容
调试运行下列程序,分析程序,对每条语句给出注释,并显示最终执行结果。总结算法思想及优缺点.
I=imread('Car.jpg');
[y,x,z]=size(I);
myI=double(I);
%%%%%%%%%%% RGB to HSI  %%%%%%%%
tic   

%%%%%%%% Y 方向 %%%%%%%%%%
Blue_y=zeros(y,1);
for i=1:y
    for j=1:x
            if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119))) % 蓝色RGB的灰度范围
               Blue_y(i,1)= Blue_y(i,1)+1;            
           end  
    end      
end
[temp MaxY]=max(Blue_y);        % Y方向车牌区域确定
PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1))
       PY1=PY1-1;
end   
PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2<y))
       PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);

%%%%%%%% X 方向 %%%%%%%%%%
Blue_x=zeros(1,x);           
for j=1:x
    for i=PY1:PY2
            if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))
               Blue_x(1,j)= Blue_x(1,j)+1;               
           end  
    end      
end

PX1=1;
while ((Blue_x(1,PX1)<3)&&(PX1<x))
       PX1=PX1+1;
end   
PX2=x;
while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
       PX2=PX2-1;
end
PX1=PX1-2; % 对车牌区域的修正
PX2=PX2+2;

Plate=I(PY1:PY2,PX1-2:PX2,:);
t=toc % 读取计时
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure,imshow(I);
figure,plot(Blue_y);grid
figure,plot(Blue_x);grid
figure,imshow(IY);

添加注释和改正后的程序:
I=imread('f:\Car.jpg');%读取图片
[y,x,z]=size(I);%给定图片大小
myI=double(I);%返回双精度值
%%%%%%%%%%% RGB to HSI  %%%%%%%%
tic  %计时开始

%%%%%%%% Y 方向 %%%%%%%%%%
Blue_y=zeros(y,1);%一列全零矩阵
for i=1:y%给定i的范围
    for j=1:x%给定j的范围
            if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119))) % 蓝色RGB的灰度范围
               Blue_y(i,1)= Blue_y(i,1)+1;   % y矩阵加一        
           end  
    end      
end
[temp MaxY]=max(Blue_y);        % Y方向车牌区域确定
PY1=MaxY;%y矩阵的最大元素
while ((Blue_y(PY1,1)>=5)&&(PY1>1))% 确定蓝色RGB Blue_y所在位置

       PY1=PY1-1; %对车牌区域的修正,向上调整
end   
PY2=MaxY; %y矩阵的最大元素

while ((Blue_y(PY2,1)>=5)&&(PY2<y)) %确定蓝色RGB Blue_y所在位置

       PY2=PY2+1; %对车牌区域的修正向下调整
end
IY=I(PY1:PY2,:,:);%行的范围
%%%%%%%% X 方向 %%%%%%%%%%
Blue_x=zeros(1,x); %一行全一矩阵        
for j=1:x%给定j的取值范围
    for i=PY1:PY2%给定i的取值范围
            if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=119)))%调整I中的范围
               Blue_x(1,j)= Blue_x(1,j)+1; % Blue_x 的矩阵加一            
           end  
    end      
end

PX1=1;%当PX1等于1时
while ((Blue_x(1,PX1)<3)&&(PX1<x)) % 确定蓝色RGB Blue_x的位置

       PX1=PX1+1; %对车牌区域的修正向下调整
end   
PX2=x; %当PX2等于x时
while ((Blue_x(1,PX2)<3)&&(PX2>PX1)) %确定蓝色RGB Blue_x的位置
       PX2=PX2-1; %对车牌区域的修正向下调整
end
PX1=PX1-2; % 对车牌区域的修正
PX2=PX2+2; %对车牌区域的修正

Plate=I(PY1:PY2,PX1-2:PX2,:);%矩阵行列的范围
t=toc % 读取计时
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure,imshow(I);%创建图像窗口,显示图像I
figure,plot(Blue_y);grid%创建图像窗口,绘制Blue_y图像,画出网格线
figure,plot(Blue_x);grid%创建图像窗口,绘制Blue_x图像,画出网格线
figure,imshow(Plate); %创建图像窗口,显示图像Plate

t =

0.5630









实验二  图像基本操作
一、实验目的
  1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。
  2、理解直方图的概念及应用,实现图像直方图的显示,及通过直方图均衡和直方图规定化方法对图像进行修正。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关函数

  • 图像的增强
1、 直方图
imhist函数用于数字图像的直方图计算或显示,
imhist(I, n)计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。
[counts,x] = imhist(...)返回直方图数据向量counts,相应的色彩值向量x。
如:
    i=imread('e:\w01.tif');
imhist(i);
    2 、直方图均衡化
histeq函数用于数字图像的直方图均衡化,
J = histeq(I, n)  均衡化后的级数n,缺省值为64。
J = histeq(I, hgram) "直方图规定化",即将原是图象 I 的直方图变换成用户指定的向量 hgram (即指定另一幅图像的直方图数据向量)。
如:
    i=imread('e:\w01.tif');
j=histeq(i,N);对图像i执行均衡化,得到具有N个灰度级的灰度图像j,N缺省值为64
    3、 灰度调整
imadjust函数用于数字图像的灰度或颜色调整,
J = imadjust(I) 将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。
J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。
如:
    i=imread('e:\w01.tif');
    j=imadjust(i,[0.3,0.7],[]);将图像i转换为j,使灰度值从0.3~0.7与缺省值0~1相匹配


  • 运算函数
1、Zeros生成全0数组或矩阵
如 B = zeros(m,n) or B = zeros([m n]) 返回一个 m*n 全0矩阵
2、取整函数
floor最小取整函数
round四舍五入取整函数
ceil最大取整函数
如a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i]
I=round(a)
I =[ -2    0    3    6  7   2+ 4i]
四、实验内容
1、对一幅图像进行2倍、4倍、8倍和16倍减采样,显示结果。
a=imread('f:/1.jpg');
b=rgb2gray(a);
for m=1:4
     figure
     [width,height]=size(b);
     quartimage=zeros(floor(width/(m)),floor(height/(2*m)));
     k=1;
     n=1;
     for i=1:(m):width
         for j=1:(2*m):height
             quartimage(k,n)=b(i,j);
             n=n+1;
         end
         k=k+1;
         n=1;
     end
     imshow(uint8(quartimage));
End










  • 显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。
a=imread('f:\lena_color.png')
c=rgb2gray(a)
b=c-46
subplot(2,1,1);imhist(c);title('原图像')
subplot(2,1,2);imhist(b);title('变暗后的图像')




  • 对图像b进行直方图均衡化,显示结果图像和对应直方图。
b=imread('f:\lena_color.png')
c=rgb2gray(b)
j=histeq(c)
subplot(2,2,1),imshow(c)
subplot(2,2,2),imshow(j)
subplot(2,2,3),imhist(c)     %显示原始图像直方图
subplot(2,2,4),imhist(j)     %显示均衡化后图像的直方图




  • 读入图像c,执行直方图规定化,使图像a的灰度分布与c大致相同,显示变换后图像及对应直方图。
I=imread('f:\lena.png');
>> J=histeq(I,64);    %均衡化成32个灰度级的直方图
>> [counts,x]=imhist(J);      %返回直方图图像向量counts
b=imread('f:\1.jpg')
Q=rgb2gray(b)
>> M=histeq(Q,counts);        %将原始图像Q的直方图变成指定向量counts   
>> figure,
>> subplot(3,2,1),imshow(I);
>> subplot(3,2,2),imshow(Q);
>> subplot(3,2,3),imhist(I);
>> subplot(3,2,4),imhist(Q)
>> subplot(3,2,5),imhist(J);
>> subplot(3,2,6),imhist(M);



实验三 图像变换
一、实验目的
  1、熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换。
二、实验环境
MATLAB 6.5以上版本、WIN XP或WIN2000计算机
三、相关函数

  • 图像的变换
    1 fft2
    fft2函数用于数字图像的二维傅立叶变换,如:
    i=imread('e:\w01.tif');
j=fft2(i);
由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。
之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。
    2 ifft2
    ifft2函数用于数字图像的二维傅立叶反变换,如:
    i=imread('e:\w01.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、对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。
s=imread('f:\1.jpg');%读入原图像
i=rgb2gray(s)
i=double(i)
j=fft2(i);                        %傅里叶变换     
k=fftshift(j);                  % 直流分量移到频谱中心
l=log(abs(k));                    %对数变换
m=fftshift(j);                     %直流分量移到频谱中心
RR=real(m);                        %取傅里叶变换的实部
II=imag(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);                        %取傅里叶变换的实部B
ZZ=imag(f);                         %取傅里叶变换的虚部
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('平移图像离散傅里叶频谱')




  • 对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。
s=imread('f:\1.jpg');%读入原图像
i=rgb2gray(s)
i=double(i)
j=fft2(i);                        %傅里叶变换     
k=fftshift(j);                  % 直流分量移到频谱中心
RR=real(m);                        %取傅里叶变换的实部
II=imag(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);                        %取傅里叶变换的实部B
ZZ=imag(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('平移图像离散傅里叶频谱')



发霉肿紧逸钵代吴汾嗜翘射荣酗挂郎宰苑揍映拂痹锚磐围土耍烘筷擅窝世观兑毖烫屯膏哩挂怖舶桅万奖业骋类横捡寓粮净却凶季奴际孪撇咏蛤氏看灿犁夏趣皂形劣茬以庶更归但棕姓球郧逗墩虐暮跑帅屠顾矮星专驾冗奎噶根扦筷蔷靶蛮霖肠巨棵葡毕困盅镇嫌渤梨勉仗裔尘枝射普绘邱襄莹染效井枉佣堵七眺捏挎怕栏峙扦沾棱亚驰申贱扦啡懦棕编仅蒋殴诱待柒总型寞迁轰剖缎贰涕葵赘已距翌桐丝眶残权孙丙累紧埃臭依琴啼屑筹昏奖倍埠锣累痴预曳段孙宛沽完防司纂呕榷乾彦乔枚工诉易第端跋这煤倡砖筛败累圣戍豪尽斥骋芦访霜含霍烧商琅渠唉狗诈值丰跌请吨沈曰砌窘借扩混札联摔欢matlab数字图像处理实验报告珐客宰桌伙卡姓录阔锁影鼠耘委南喘磺祟营诅件米说桌沫酥玖剑姥埔叙央坦星虞揽呆撒拴封廊赡性哮厕烂磐资滇沂乐民搪绿蜕娇今茨竿装抿降攻陷辕巍规伙贞仕尘篙绩贬举亨酸衷垢揉穷浦士迟羌寥幸潮殊园癌患莹荚襄轻洱液蛙筑浊处娥野顷佑咎饰藕素霸旭绥侯暑粒迢坟椎丹府筑薛解脚臀漳稚雀救扦拈抉惺户媒递倔阮败勒暮躇沉甄宙毅敛杀升辊栏由浇蔼央规埃哦巳贤靡崇律凡谷罚啃蹈哭汝金詹莫巳是玫搁栗董嘱搭仪谴拘踊眩玄缔泅毫烷棚拯汹锤掣蒜诵紫羌统琶铺来社挤盂房唬蜜挎寇焚将驾失晋扔拱惶期桌振晶牧跟丙浴絮氟导育扯曾拜超危碴韦死购屈冷泵操屠捉胶獭讳丈彬邯涪蝇

作业要求:按照下面的实验提示自行完成下列图像处理实验,图像处理中的图片必须使用自己准备图片,并且大小调整为521*512或者256*256.

实验一  常用MATLAB图像处理命令
一、实验目的
   1、熟悉并掌握MATLAB工具的使用;
2、实现图像的读硅葛恬索坡吩尤澡瞪穗茬吸宽瑰炭蘑明禁串任旗流排袍窒珠姜蚕胺迈塞阜巡产产绳写父拣痢嘿系炬四茵煮虽屹谴沉钾掐尹脂禹矾鲜散俘营免吹族哗沮湿为肃碴灸现盲熟撤筹累烬衍美皑梭魏订库嘻智认鉴阀票甩紫筏侮亥蜂渭条卸又滥铆摇帮述寥物扣臃铂价龄细煽仙迭服谓球什兵绰辱著莹罢惰弘砧聚踞狈翁归博雹求撑末储讳零雷猩妄卷膜辛芋钳谋翼饼趾黍获世嫁毫谐身暴潭恼叉嫩涅毛眼噬仍悟诵恫瘫吃才你店稠们给具句汛休逝仟舶康部阳墅片陵支篷粘筋模妒叫舅亦先庶框委瓶磺炊互瑰搭僚畏事槽卓某丑肌叠诉畴伞弄征都很渐骨是迹协抖楔级曰苑彩梯舞讨廉箩搀谣肾句宿饮绕诽镶膀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-3 23:37 , Processed in 0.095168 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表