数字图像处理实训报告


实验一、计算图象统计参数及直方图变换

一、实训目的

1. 读取图像(文件名为cameraman.tif’);

2. 最大值、最小值、均值

3. 直方图(要求不能调用imhist函数,只能用该函数来验证自编直方图程序块的正确性)。

4. 计算并分析图像直方图(imhist

5. 利用直接灰度变换法对图像进行灰度变换(imadjust

6. 直方图均衡化处理及显示(histeq

 

二、实训环境配置

把要读取的图片放入MATLAB的根目录bin

 

三、实训内容

1.读取图像(文件名为‘cameraman.tif’);

 

1)在命令窗口输入f = imread('cameraman.tif')

 

 

2)显示图像

在命令窗口输入imshow(f)

 

 

2.最大值、最小值、均值

 

3.直方图(要求不能调用imhist函数,只能用该函数来验证自编直方图程序块的正确性)。

 

在刚刚的基础上继续写

[m,n]=size(f);

for row=1:m

      for col=1:n

        i=f(row,col);

        H(i+1)=H(i+1)+1;% 0对应H(1)

       end

  end

figure,bar(0:255,H);

得到的图是

 

 

然后用imhist出的图是

h=imhist(f);

figure,bar(0:255,h)

 

验证结果正确

 

 

4.利用直接灰度变换法对图像进行灰度变换(imadjust

输入

dh=imadjust(f,[0 1],[0 1],2)

imshow(hd);

显示的图像为

 

灰度变换后的直方图是

 

5.直方图均衡化处理及显示(histeq

输入

jh=histeq(dh)

Imshow(jh)

得到图像

 

均衡化后的直方图

 

6 程序

f=imread('cameraman.tif');

max=max(f(:));

min=min(f(:));

mean=mean(f(:));

h=zeros(1,256);[m,n]=size(f);

for row=1:m

for col=1:n

        i=f(row,col);

        h(i+1)=h(i+1)+1;

    end

end

figure,bar(0:255,h);

h=imhist(f);

figure,bar(0:255,h);

dh=imadjust(f,[0 1],[0 1],2);

figure,bar(0:255,dh);

imshow(dh);

imhist(dh);

jh=histeq(dh);

figure,bar(0:255,jh);

imshow(jh);

 

实验二 傅里叶变换及空间域和频率域滤波

一、实训目的

1、利用 MATLAB 实现数字图像的傅里叶变换

读入并显示图test1.tif”,作该图的二维 FFT 变换 F,将其直流分量移到频谱中心 F1fftshift()函数),计算其实部 RR、虚部 II,用两种方法计算幅值 A1=abs(F1)A2=sqrt(RR.^2+II.^2),分别显示 A1 A2,并加以比较。

2、近似冲击函数二维傅里叶变换

  A=zeros(99,99);

  A(49:51,49:51)=1;

A的二维傅里叶变换 B,将B直流分量移到频谱中心B1,分别用函数imshowmesh显示AB1模的对数(log(1+abs(B1)))。

3、空间滤波与频域滤波

将图test2.tif”分别进行空间与频域滤波。

二、实训环境配置

把要读取的图片放入MATLAB的根目录bin

三、实训内容

1、利用 MATLAB 实现数字图像的傅里叶变换

读入并显示图test1.tif”,作该图的二维 FFT 变换 F,将其直流分量移到频谱中心 F1fftshift()函数),计算其实部 RR、虚部 II,用两种方法计算幅值 A1=abs(F1)A2=sqrt(RR.^2+II.^2),分别显示 A1 A2,并加以比较。

f=imread('test1.tif');

F=fft2(f);

F1=fftshift(F);

II=imag(F1);

RR=real(F1);

A1=abs(F1);

A2=sqrt(RR.^2+II.^2);

subplot(122);imshow(log(1+A2),[]);title('sqrt(RR.^2+II.^2');

subplot(121);imshow(log(1+A1),[]);title('abs');2.

得到图像

 

2、近似冲击函数二维傅里叶变换

  A=zeros(99,99);

  A(49:51,49:51)=1;

A的二维傅里叶变换 B,将B直流分量移到频谱中心B1,分别用函数imshowmesh显示AB1模的对数(log(1+abs(B1)))。

 A=zeros(99,99);

 A(49:51,49:51)=1;

 B=fft2(A);

 B1=fftshift(B);

 figure,imshow(A);

 figure,mesh(A);

 figure,mesh(log(1+abs(B1)));

 figure,imshow(log(1+abs(B1)));

得到图片

冲击函数

 

冲击函数频谱表示

 

 

冲击函数频谱三维图

 

冲击函数展示位三维图形

 

3、空间滤波与频域滤波

将图test2.tif”分别进行空间与频域滤波。

g=imread('test2.tif');

figure,imshow(g);

G=fft2(g);

w=fspecial('gaussian',9,2);

fi1=imfilter(g,w);

W=freqz2(w,256,256);

W1=ifftshift(W);

Ff=G.*W1;

fi2=real(ifft2(Ff));

figure,imshow(w);

title('w');

figure,mesh(W);

title('W');

title('test2.tif(g)');

figure,imshow(fi1,[]);

figure,imshow(fi2,[]);

 

得到图像

高斯滤波器w

 

高斯滤波器W(频谱)

 

 

 

 

未滤波之前图片

 

空间滤波之后的图片

 

 

 

频率域滤波之后

 

四、实训总结

1test1.tif”做二维傅里叶变换,得到其频域表达F。取F得实部和虚部计算幅度值,得到上边右图。直接使用abs函数得到幅度值得到左边的图。比较俩图可以看出,结果是一样的。

3分析可以看出,空间滤波和频率域滤波都使得图片变模糊。但是二者的原理不同。空间域滤波是直接对像素进行操作,而频率域滤波是把图片变换到频率域内,在频率域内做完滤波之后再经反变换得到变换后的图片。在代码中,直接调用了专用函数所以没有看到这些内部细节。

 

 

实验 彩色图像处理

一、实训目的

二、实训环境配置

把要读取的图片放入MATLAB的根目录bin

三、实训内容

1、 使用 RGBIndexedGray图像间转换函数对图像“strawberries.tif”使用rgb2ind 分别产生8色抖动和非抖动图像;使用rgb2gray实现图像转换,并使用函数dither产生其抖动形式的图像。

第一步:

输入

f=imread('strawberries.tif');

imshow(f);

读取显示图像

 

 

2、 第二步:

3、 输入

4、 [x1,map1] = rgb2ind(f,8,"nodither")

5、 imshow(x1,map1)

6、 得到图像抖动处理后的图像

 

 

第三步:

输入

[x2,map2] = rgb2ind(f,8,'dither')

imshow(x2,map2)

得到无抖动处理后的图像

 

2彩色图像平滑与锐化

a) 对图像flower.tif”在RGB空间实现彩色图像的平滑(w=ones25./(25*25))与锐化(w= [1 1 1 1 1; 1 1 1 1 1; 1 1 -24 1 1 ; 1 1 1 1 1; 1 1 1 1 1];)(函数 imfilter;

 

第一步:

输入

f=imread('flower.tif');

imshow(f);

读取和显示图像

 

第二步: 平滑

输入

fr=f(:,:,1)

fg=f(:,:,2)

fb=f(:,:,3)

w=ones(25)./(25*25)

fr_filter=imfilter(fr,w)

fg_filter=imfilter(fg,w)

fb_filter=imfilter(fb,w)

f_filter=cat(3,fr_filter,fg_filter,fb_filter)

得到图像

 

 

第三步 锐化:

输入

w1=[1 1 1 1 1;1 1 1 1 1;1 1 -24 1 1;1 1 1 1 1;1 1 1 1 1];

fen_r= imsubtract(fr,imfilter(fr,w1))

fen_g= imsubtract(fg,imfilter(fg,w1))

fen_b= imsubtract(fb,imfilter(fb,w1))

fen=cat(3,fen_r,fen_g,fen_b)

imshow(fen)

得到图像

 

 

b) HSI空间实现彩色图像的平滑(w=ones25./(25*25)),(函数imfilter, rgb2hsi, cat),观察仅平滑亮度分量(intensity)和平滑全部三个分量结果的差别。

第一步:

读取图像显示 写入w

rgb=imread('flower.tif')

hsi=rgb2hsi(rgb)

w=ones(25)./(25*25)

第二步:

自定义rgb2hsi函数

File/New/Function

输入函数

function [ hsi ] = rgb2hsi( rgb )

 

rgb=im2double(rgb);

r=rgb(:,:,1);

g=rgb(:,:,2);

b=rgb(:,:,3);

%Implement the conversion equations.

num=0.5*((r-g)+(r-b));

den=sqrt((r-g).^2+(r-b).*(g-b));

theta=acos(num./(den+eps));

H=theta;

H(b>g)=2*pi-H(b>g);

H=H/(2*pi);

num=min(min(r,g),b);

den=r+g+b;

den(den==0)=eps;

S=1-3.*num./den;

H(S==0)=0;

I=(r+g+b)/3;

%Combine all three results into an hsi image.

hsi=cat(3,H,S,I);

 

end

第三步:

仅平滑亮度分量

i=hsi(:,:,3)

i_filter=imfilter(i,w)

imshow(i_filter)

第四步:

平滑全部三个分量

h=hsi(:,:,1)

s=hsi(:,:,2)

h_filter=imfilter(h,w)

s_filter=imfilter(s,w)

fen=cat(3,h_filter,s_filter,i_filter)

ishow(fen)

得到图像

 

 

四、实训总结

第一个题目可以看到抖动处理之后的图像显示出更好的色调,而且轮廓错误明显减少,这是抖动引入的“随机性”的结果。图像有一点点模糊,但明显比后图的可视性高。

实验 形态学图像处理

一、实训目的

1. 调入并显示图像Plane2.jpg”;

2. 选取合适的阈值,得到二值化图像Plane2-2.jpg

3. 设置结构元素;

4. 对得到的二值图像Plane2-2.jpg进行腐蚀运算;

5. 对得到的二值图像Plane2-2.jpg进行膨胀运算;

6. 对得到的二值图像Plane2-2.jpg进行开运算;

7. 对得到的二值图像Plane2-2.jpg进行闭运算;

 

二、实训环境配置

把要读取的图片放入MATLAB的根目录bin

三、实训内容

f = imread('Plane2.jpg');

gg=im2bw(f);

imshow(gg);

se=strel('disk',4);

A=imerode(gg,se);

imshow(A);

b=[0 1 0;1 1 1;0 1 0];

B=imdilate(gg,b);

imshow(B);

se = strel('square',4);

o=imopen(gg,se);

imshow(o);

c=imclose(gg,se);

imshow(c);

得到图像

原图像

 

二值图像

 

腐蚀后

 

膨胀后

 

 

开运算

 

闭运算

 

 

选作内容:(图片任选,选作1道)

一、实训目的

1. 车牌识别图像预处理技术:

要求:

1) 对原始车牌图像做增强处理;

2) 对增强后的彩色图像进行灰度变换;

3) 对灰度图像进行直方图均衡处理;

4) 选取自适应的阈值,对图像做二值化处理;

5) 显示每步处理后的图像;

6) 分析此种图像预处理的优缺点及改进措施,简要叙述车牌字符识别。

二、实训环境配置

把要读取的图片放入MATLAB的根目录bin

三、实训内容

 

i=imread('timg.jpg');

 figure,imshow(i);

 title('原图');

 w1=ones(25)./(25*25);

 i1=imfilter(i,w1,'replicate');

figure,imshow(i1);

 title('rgb平滑');

 g=rgb2gray(i);

 figure,imshow(g);

title('灰度');

c=histeq(g);         %直方图均衡化

figure,imshow(c);

title('直方图均衡化');

b=im2bw(g);% b是二值图像,不需要求阈值

figure,imshow(b);

title('二值化');

 

 

 

 

 

 

 

实训总结

我一直想做计算机视觉,想把视觉运用在机器人智能识别和打击上,我通过这次实训,学习了并掌握做视觉用到的最基本的图像处理算法。让我在使用OpenCV的函数上 更加得心应手。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值