图像处理实验报告.docx

上传人:b****7 文档编号:25644629 上传时间:2023-06-11 格式:DOCX 页数:27 大小:1.03MB
下载 相关 举报
图像处理实验报告.docx_第1页
第1页 / 共27页
图像处理实验报告.docx_第2页
第2页 / 共27页
图像处理实验报告.docx_第3页
第3页 / 共27页
图像处理实验报告.docx_第4页
第4页 / 共27页
图像处理实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

图像处理实验报告.docx

《图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《图像处理实验报告.docx(27页珍藏版)》请在冰豆网上搜索。

图像处理实验报告.docx

图像处理实验报告

重庆交通大学

学生实验报告

实验课程名称数字图像处理

开课实验室数学实验室

学院理学院年级信息与计算科学专业2班

学生姓名李伟凯学号************

开课时间2014至2015学年第1学期

实验模型建立

实验分析求解

结果分析完善

文档清晰

综合成绩

教师姓名

 

实验

(一)图像处理基础

Ø实验目的

学习Matlab软件的图像处理工具箱,掌握常用的一些图像处理命令;通过编程实现几种简单的图像增强算法,加强对图像增强的理解。

Ø实验内容

题目A.打开Matlab软件帮助,学习了解Matlab中图像处理工具箱的基本功能;

题目B.掌握以下常见图像处理函数的使用:

imread()imageinfo()imwrite()imopen()imclose()imshow()impixel()imresize()imadjust()imnoise()imrotate()im2bw()rgb2gray()

题目C.编程实现对图像的线性灰度拉伸y=ax+b,函数形式为:

imstrech(I,a,b);

题目D.编程实现对图像进行直方图均衡化处理,并将实验结果与Matab中imhist命令结果比较。

三、实验结果

1).基本图像处理函数的使用:

I=imread('rice.png');

se=strel('disk',1);

I_opened=imopen(I,se);

%对边缘进行平滑

subplot(1,2,1),imshow(I),title('原始图像')

subplot(1,2,2),imshow(I_opened),title('平滑图像')

 

I=imread('rice.png');

se=strel('disk',1);

I_opened=imopen(I,se);

imview(I_opened,[])

Imageinfo(‘rice.png’)

 

二、实现灰度图像的拉伸(代码)

I=imread('rice.png');

I1=2*I+5;

%对其进行线性拉伸2*I+5;

subplot(1,2,1),imshow(I),title('原始图像')

subplot(1,2,2),imshow(I1),title('f=2x+5')

三、图像进行直方图均衡化处理(代码)

4、编程实现对图像进行直方图均衡化处理,并将实验结果与Matab中imhist命令结果比较。

clearall;

I=imread('rice.png');

figure;

subplot(221);imshow(I);

subplot(222);imhist(I);

I1=histeq(I);%直方图均衡化处理

subplot(223);imshow(I1);

subplot(224);imhist(I1);

 

四、实验体会

通过这次实验,让我认识到了到图像处理在我们生活中的应用。

以及相应的直方图均衡化的方式和方法,收获颇丰

 

实验二

实验目的

掌握数字图像增强的基本原理和方法,通过Matlab编程实现图像的各种增强技术;掌握Matlab软件图像处理工具箱中相关图像增强函数及用法。

实验内容

1、利用灰度线性变换和非线性变换进行图像增强处理。

2、编程实现图像的平滑增强,分别采用3×3,6×6,8×8的窗口实现,比较窗口大小对图像平滑效果的影响。

下面给出了对应3×3平滑模板:

3、编程实现图像的锐化增强,分别采用Robert梯度算子,prewiit梯度算子,Laplace算子实现,比较实现结果,说明每种算子的锐化特点;

实验要求

采用Matlab自带图像或者自己找些图像,验证自己编写的图像增强图像函数的正确性,并与Matlab工具箱中对应函数的处理结果比较,显示处理后结果,并将代码和显示结果整理在实验报告中。

实验结果

用滤波器出去图像噪声:

I1=imread('C:

\123.png');

I=rgb2gray(I1);

subplot(2,2,1),imshow(I),title('原始图像')

h=ones(3,3);

h=h/9;

k=conv2(I,h);

subplot(2,2,2),imshow(k,[]),title('3*3平滑增强')

h1=ones(6,6);

h1=h1/36;

k1=conv2(I,h1);

subplot(2,2,3),imshow(k1,[]),title('6*6平滑增强')

h2=ones(8,8);

h2=h2/64;

k2=conv2(I,h2);

subplot(2,2,4),imshow(k2,[]),title('8*8平滑增强')

得到:

滤波器程序为

I=imread('C:

\new123.png');

I=rgb2gray(I);

figure

(1),imshow(I),title('输出原始图像');

[x,y]=size(I);

a=1;

c=1;

%算术均值滤波

fori=1+a:

x-a

forj=1+c:

y-c

J1(i,j)=sum(sum(I(i-a:

i+a,j-c:

j+c),1),2)/((2*a+1)*(2*c+1));

end

end

figure

(2),imshow(J1),title('算术均值滤波后的图像')

%几何均值滤波

I1=double(I);

fori=1+a:

x-a

forj=1+c:

y-c

J2(i,j)=prod(prod(I1(i-a:

i+a,j-c:

j+c),1),2)^(1/((2*a+1)*(2*c+1)));

end

end

figure(3),imshow(J2),title('几何均值滤波后的图像')

 

四、实验体会

通过这次实验,让我认识到了到图像处理在我们生活中的应用。

以及相应的图像滤波的集中方式,以及降低噪声均值滤波和中值滤波的差异以及方式和方法,收获颇丰

实验(三)

一、实验目的

掌握Matlab中二值图像的基本逻辑运算符号;掌握膨胀和腐蚀的基本原理和作用,可以根据实际需要,熟练使用不用结构元素进行膨胀和腐蚀操作;掌握开运算和闭运算的基本原理作用,能够熟练使用开和闭运算对二值图像进行处理。

二、实验要求

找Matlab自带图像或者自己找些图像,说明1中各个函数的调用格式和功能;按2中要求进行实验,显示处理后结果,并进行必要的文字说明;按3要求编写代码,并给出实验图像效果和结论。

三、实验内容

题目A.学习Matlab的图像处理工具箱中下列函数:

rgb2gray(),im2bw(),graythresh(),strel(),imdilate(),imerode(),imopen(),imclose();

clc

clear

figure

%rgb2gray()、将彩色图像转化为灰度图

A='c:

/cavin.jpg';

I=imread(A);

II=rgb2gray(I);

imshow(II)

%im2bw()、将图像转成二值图像

I=imread(A);

II=im2bw(I);%灰度图和彩图均可

imshow(II)

%graythresh()通过otsu方法得到图像二值化时的阀值

I=imread(A);

I=rgb2gray(I);

J=edge(I,'canny',graythresh(I));

subplot(1,2,1),imshow(I),title('原图')

subplot(1,2,2),imshow(J),title('边界图')

%strel()创建由指定形状shape对应的结构元素,其中shape的种类有'arbitrary'、'pair'、'diamond'、'periodicline'、'disk'、'rectangle'、'line'、'square'、'octagon’

s1=strel('square',6)%创建6*6的正方形

s2=strel('line',10,45)%创建直线长度10,角度45

s3=strel('disk',15)%创建圆盘半径15

s4=strel('ball',15,5)%创建椭圆体,半径15,高度5

%imdilate()、实现图像膨胀

BW=zeros(9,10);

BW(4:

6,4:

7)=1;

SE=strel('square',3);

BW2=imdilate(BW,SE);

figure

(1),imshow(BW,'notruesize')

figure

(2),imshow(BW2,'notruesize')

%imerode()、实现函数腐蚀

BW1=imread(A);

SE=sterl('arbitrary',eye(5));

BW2=imerode(BW1,SE);

imshow(BW1)

figure,imshow(BW2)

%imopen()、打开文件

se=strel('disk',5);

I_opened=imopen(A,se);

figure,imshow(I_opened,[])

%imclose()、关闭文件

W=imclose(A,se);

figure,imshow(closeBW)

题目B.运行下面一段代码,体会形态学图像处理的几个基本操作及其作用

(1)A='c:

/cavin.jpg';

I=imread(A);

I=rgb2gray(I)

subplot(1,2,1),imshow(I),title('原始图片')

h=[010;111;010];

II=imdilate(I,h);

subplot(1,2,2),imshow(II),title('膨胀后图片')

尝试改变上面代码中结构元素的大小和形状,运行查看结果

(2)A='c:

/cavin.jpg';

I=imread(A);

I=rgb2gray(I)

subplot(1,2,1),imshow(I),title('原始图片')

se=strel('disk',10);

II=imerode(I,se);

subplot(1,2,2),imshow(II),title('腐蚀后图片')

将上面的结构元素大小分别改为5和20,运行代码,并与上面的结果比较并说明差异。

将代码

(1)改为

(1)*

A='c:

/cavin.jpg';

I=imread(A);

I=rgb2gray(I)

subplot(1,2,1),imshow(I),title('原始图片')

h=zeros(9,10);

h(4:

6,4:

7)=1;

II=imdilate(I,h);

II=imdilate(I,h);

subplot(1,2,2),imshow(II),title('膨胀后图片')

 

将代码

(1)改为

(1)**

A='c:

/cavin.jpg';

I=imread(A);

I=rgb2gray(I)

subplot(1,2,1),imshow(I),title('原始图片')

h=[0111110;0100010;0101010;0100010;0111110];

II=imdilate(I,h);

subplot(1,2,2),imshow(II),title('膨胀后图片')

运行

(1)**得到膨胀图

运行代码

(2)得到腐蚀图像

(2)中结构元素大小分别改为5和20,运行代码得到腐蚀图像

结构元素的大小表征了腐蚀程度的大小,结构元素越大,对图像的腐蚀程度越大,但腐蚀区域的尖角不明显,趋近于圆形,结构元素越小表征腐蚀程度越小,但腐蚀区域的尖角明显,呈现为多边形。

题目C.采用形态学方法去除下图中圆形目标中心的黑圈;利用下面代码实现去除圆形目标

中心的黑圈

代码为:

BW=im2bw(imread('c:

\test1.jpg'));

BW1=imfill(BW,'holes');

figure,imshow(BW1)

结果为

 

题目D.采用形态学方法对下图指纹图像进行处理,使得图像中的纹理更加清晰,同时去除噪声。

利用下面的代码对指纹图像进行处理

I=imread('C:

\test2.png');

J=imnoise(I,'salt&pepper',0.02);

se=strel('disk',1);

II=imerode(J,se);

imshow(II)

得到图像为

四、实验体会

通过这次实验,让我认识到了到图像处理在我们生活中的应用。

以及相应的图像增强的和图像边缘提取的方式和方法,收获颇丰

 

实验(四)

实验目的

掌握图像边缘检测的基本内容和常用方法,通过Matlab编程实现给定图像的任务,体会图像边缘检测在工程中的应用。

实验要求

实验中需要的图像自己提供,每个小实验需要给出实验结果和相应的文字说明;将2-3问中自己编写的边缘检测算法和Matlab中自带的edge()函数比较,寻找它们之间的差异,并就如何优化自己的算法给出建议。

实验内容

一:

采用以下四个模板检测图像中的直线,用实验说明各个模板的特点和性能;

-1

-1

-1

2

2

2

-1

-1

-1

-1

2

-1

-1

2

-1

-1

2

-1

-1

-1

2

-1

2

-1

2

-1

-1

2

-1

-1

-1

2

-1

-1

-1

2

线检测程序

clc

clear

I=imread('C:

\123.png');

I=rgb2gray(I);

I=im2bw(I);

figure

(1),

imshow(I)

title('原始')

fori=1:

4

ifi==1

w=[-1,-1,-1;2,2,2;-1,-1,-1];

tit='水平';

elseifi==2

w=[-1,-1,2;-1,2,-1;2,-1,-1];

tit='+45度';

elseifi==3

w=[-1,2,-1;-1,2,-1;-1,2,-1];

tit='垂直';

else

w=[2,-1,-1;-1,2,-1;,-1,-1,2];

tit='-45度';

end

end

end

J=imfilter(I,w);

T=max(J(:

));

J=J>=T;

figure(i+1)

imshow(J)

title({[num2str(tit),'二值'];'处理后的图像'})

end

运行结果为:

二:

比较Roberts算子、Prewitt算子和Sobel算子的异同,编程实现基于这三种梯度算子的边缘检测算法(阈值自定),给出实验结果,比较各种梯度的优劣;

Robert、Prewitt、Sobel三种梯度算子的边缘检测程序

sourcePic=imread('C:

\123.png');

grayPic=rgb2gray(sourcePic);

I=grayPic;

newGrayPic=grayPic;

[m,n]=size(grayPic);

robertsNum=0;

threshold=15;

fori=1:

m-1

forj=1:

n-1robertsNum=abs(grayPic(i,j)-grayPic(i+1,j+1))+abs(grayPic(i+1,j)-grayPic(i,j+1));

if(robertsNum>threshold)

newGrayPic(i,j)=255;

else

newGrayPic(i,j)=0;

end

end

end

figure,imshow(newGrayPic),title('robert算子图像');

BW1=edge(I,'prewitt');

figure,imshow(BW1),title('prewitt算子图像');

f=im2double(grayPic);

[VSFATThreshold]=edge(f,'sobel','vertical');

figure,imshow(f),title('原始图像');

figure,imshow(VSFAT),title('垂直图像边缘检测');

SFST=edge(f,'sobel',Threshold);

figure,imshow(SFST),title('水平图像边缘检测');

ss=[-2-10;-101;012];

SFST45=imfilter(f,ss,'replicate');

SFST45=SFST45>=Threshold;

figure,imshow(SFST45),title('45度图像边缘检测');

运行结果如下:

由于Roberts算子是利用图像的两个对角线的相邻像素之差进行梯度幅值的检测,所以求得的是在差分点处梯度幅度值的近似值,并检测水平和垂直方向边缘的性能好于斜线方向的边缘,检测精度比较高,但容易失去一部分边缘,同时由于经过图像平滑计算,因此不能抑制噪声,该算子对于具有陡峭的低噪声图像相应最好。

Prewitt算子和Sobel算子都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,因此两者均对噪声具有一定的抑制能力,但这种抗噪声能力是通过像素平均来实现的,所以图像产生一定的模糊,而且还会检测出一些伪边缘,所以检测精度比较低,该类算子比较适于图像边缘灰度值比较尖锐,且图像噪声比较小的情况。

三:

别用4邻域和8邻域Laplacian算子实现图像的边缘检测,给出实验结果,并与上面三种一阶梯度算子的效果比较,说明优劣;

4邻域Laplacian算子边缘检测的程序

clc

clear

I=imread('C:

\123.png');

I=rgb2gray(I);

[m,n]=size(I);

figure

(1);

imshow(I);

title('原始图');

p=m;

q=n;

c=ones(4,4);

c=-c;

c(2:

3,2:

3)=3;

I=double(I);

forj=1:

p-3

fori=1:

q-3

b1=I(j:

j+3,i:

i+3);

buffer(j,i)=sum(sum(c.*b1));

J(j,i)=uint8(buffer(j,i));

ifJ(j,i)<0

J(j,i)=-J(j,i);

end

ifJ(j,i)>255

J(j,i)=255;

end

end

end

fori=1:

q

J(1,i)=I(1,i);

J(p,i)=I(p,i);

end

forj=1:

p

J(j,1)=I(j,1);

J(j,q)=I(j,q);

end

figure

(2);

imshow(J);

title('laplacian算子边缘检测');

运行结果为

将上面程序中的的四阶邻域算子循环部分改为

c=ones(8,8);

c=-c;

c(4:

5,4:

5)=15;

I=double(I);

forj=1:

p-7

fori=1:

q-7

b=I(j:

j+7,i:

i+7);

w=c.*b;

buffer(j,i)=sum(sum(w));

J(j,i)=uint8(buffer(j,i));

ifJ(j,i)<0

J(j,i)=-J(j,i);

end

ifJ(j,i)>255

J(j,i)=255;

end

end

end

运行得到结果为laplacian算子边缘检测图像

Laplacian算子都是对图像进行滤波运算,在梯度算子部分的权值和阶数的选择上有些差异,对噪声具有一定的抑制能力,但会检测出一些伪边缘,检测精度比较高。

四、实验体会

通过这次实验,让我认识到了到图像处理在我们生活中的应用。

以及相应的图像增强的和图像边缘提取的方式和方法,还有相应的比如说laplacian算子和prewitt或者梯度算子的区别,收获颇丰

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1