机器视觉.docx
《机器视觉.docx》由会员分享,可在线阅读,更多相关《机器视觉.docx(19页珍藏版)》请在冰豆网上搜索。
![机器视觉.docx](https://file1.bdocx.com/fileroot1/2023-1/10/4c24d5e9-5bc4-4e10-8e91-9785c283d011/4c24d5e9-5bc4-4e10-8e91-9785c283d0111.gif)
机器视觉
大作业
1.产生下图所示图像f1(m,n),其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。
对其进行FFT:
①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;
②若令
,重复以上过程,比较二者幅度谱的异同,简述理由;
③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)
的幅度谱进行比较;
④若将f1(m,n)顺时针旋转90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),试显示FFT(f5)
的幅度谱,并指出其与FFT(f1)和FFT(f4)的关系;
⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与FFT(f2)和FFT(f3)
的关系,比较FFT(f6)和FFT(f5)的幅度谱。
2.一幅灰度图像(256级,白为255,黑为0),分别加入高斯白噪声和椒盐噪声,再分别进行3×3的平均滤波和中值滤波,显示原图像、加噪图像和滤波结果图像,并比较四种滤波结果。
3.对某一灰度图像,进行如下处理:
(1)分别利用Roberts、Prewitt和Sobel边缘检测算子进行边缘检测;
(2)将Roberts、Prewitt和Sobel边缘检测算子修改为锐化算子,对原图像进行锐化,同屏显示原图像、边缘检测结果和锐化后图像,说明三者之间的关系。
第一题
一、画出所要求图形:
>>f1=zeros(256,256)——将f赋值为全0,大小为256*256的矩阵;
>>f1(64:
192,112:
144)=1——将f中列像素为64-192、横像素为112-144的像素块赋值为1;
>>imshow(f1,'notruesize')——显示f矩阵所对应的图像。
如下图所示:
二、对f1进行二维快速傅里叶变换并图原图同屏显示:
>>f1=zeros(256,256);
>>f1(64:
192,112:
144)=1;
>>subplot(1,2,1),imshow(f1,'notruesize');——在一个平面内的左半块图中显示原图;
>>F1=fft2(f1);——对f1进行二维快速傅里叶变换;
>>F2=fftshift(abs(F1));——把快速傅里叶变换的DC组件移到光谱中心;
>>subplot(1,2,2),imshow(F2,'notruesize')——在一个平面内的右半块图中显示变换后的图像。
三、实现
aa=ones(1,33)——建立一个1行33列的矩阵
form=1:
33
bb=(-1).^m
cc(1,m)=bb
end————for语句,使cc成为(1,-1,……1,-1)共33列的矩阵
aa=cc.*(-1)——使aa成为(-1,1,……-1,1)共33列的矩阵
f1=zeros(256,256);
f1(64:
192,112:
144)=1;
f2=f1;
forhang=1:
2:
129
shiji=hang+63
f2(shiji,112:
144)=aa
end————for语句,使f2从64行开始到192行偶数行为aa(f2图像如下,左图为原图,右图为放大图)
forhang=1:
2:
128
shiji=hang+1+63
f2(shiji,112:
144)=cc
end————for语句,使f2从65行开始到191行奇数行为cc(f2图像如下,左图为原图,右图为放大图)
四、对f2进行二维快速傅里叶变换并图原图同屏显示:
>>subplot(1,2,1),imshow(f2,'notruesize');
>>F1=fft2(f2);
>>F2=fftshift(abs(F1));
>>subplot(1,2,2),imshow(F2,'notruesize')
五、将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱
>>f3=imrotate(f2,90)——旋转90度得到如下图像
>>imshow(f3,'notruesize')
>>F1=fft2(f3);
>>F2=fftshift(abs(F1));
>>subplot(1,2,1),imshow(f3,'notruesize');
>>subplot(1,2,2),imshow(F2,'notruesize')
六、将f1(m,n)顺时针旋转90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),试显示FFT(f5)
的幅度谱
f4=imrotate(f1,90);
f5=f4+f1
七、令f6(m,n)=f2(m,n)+f3(m,n),显示FFT(f6)的幅度谱
>>f6=f2+f3;
>>F1=fft2(f6);
>>F2=fftshift(abs(F1));
>>imshow(F2,'notruesize')
第二题
显示灰度图像
I=imread('rice.png');——将矩阵赋值给I
imshow(I,'notruesize')——显示图像如图
Igs=imnoise(I,'gaussian',0,0.02);——加入高斯噪声
imshow(Igs,'notruesize')——显示图像如下
>>Ijy=imnoise(I,'salt&pepper',0.02);——加入椒盐噪声
>>imshow(Ijy,'notruesize')——显示图像如下
加入高斯噪声后使用中值滤波,滤波前后结果如图:
I=imread('rice.png');
Igs=imnoise(I,'gaussian',0,0.02);
Imshow(Igs)
Igszl=medfilt2(Igs)——对Igs进行中值滤波
figure
(2)
imshow(Igszl)
加入椒盐噪声后使用中值滤波,滤波前后结果如图:
I=imread('rice.png');
Ijy=imnoise(I,'salt&pepper',0.02);
imshow(Ijy)
Ijyzl=medfilt2(Ijy)
figure
(2)
imshow(Ijyzl)
加入高斯噪声后使用平均滤波,滤波前后结果如图:
I=imread('rice.png');
I=imnoise(I,'gaussian',0,0.02);
imshow(I);
h=[111
111
111];——产生滤波模板
H=h/9;——对滤波模板归一化
J=conv2(I,h);——用均值模板对图像滤波
figure;
imshow(J,[])——显示滤波结果
加入椒盐噪声后使用平均滤波,滤波前后结果如图:
I=imread('rice.png');
I=imnoise(I,'salt&pepper',0.02);
imshow(I)
h=[111
111
111];
H=h/9;
J=conv2(I,h);
figure;
imshow(J,[])
显示原图像、加噪图像和滤波结果图像:
(1)高斯噪声
I=imread('rice.png');
Igs=imnoise(I,'gaussian',0,0.02);
figure,
imshow(I);
h=[111
111
111];
H=h/9;
J=conv2(Igs,h);
imshow(J,[])
I=imnoise(I,'gaussian',0,0.02);
figure;
Imshow(I)
K=medfilt2(I);
figure;
imshow(K)
I=imread('rice.png');
figure;
imshow(I)
(2)椒盐噪声
I=imread('rice.png');
Ijy=imnoise(I,'salt&pepper',0.02);
h=[111
111
111];
H=h/9;
J=conv2(Ijy,h);
imshow(J,[])
K=medfilt2(Ijy);
figure;
imshow(K)
figure;
imshow(Ijy)
figure;
imshow(I)
第三题
一、分别利用Roberts、和Sobel边缘检测算子进行边缘检测,结果如图
>>I=imread('rice.png');——读取原图
>>imshow(I)——显示原图
>>R=edge(I,'Roberts');——R为Roberts边缘检测算子进行边缘检测的结果
>>figure;imshow(R);——第二个图显示Roberts边缘检测算子进行边缘检测的结果
>>S=edge(I,'sobel');——S为边缘检测算子进行边缘检测的结果
>>figure;imshow(S);
>>P=edge(I,'prewitt');——P为Prewitt边缘检测算子进行边缘检测的结果
>>figure;imshow(P);——第四个图显示Prewitt边缘检测算子进行边缘检测的结果
使用锐化算子(拉式算子):
circuit=imread('rice.png');
I=circuit;
I=double(I);——将图像矩阵转化为double类型
imshow(I,[]);
h=[010
1-40
010];——拉式算子的表示模板
J=conv2(I,h,'same');——拉式算子对图像滤波
K=I-J;——增强图像为原始图像减去拉式算子滤波的图像
subplot(1,2,1),imshow(circuit)
subplot(1,2,2),imshow(K,[])
Roberts边缘检测及锐化,结果如图(左1为原图,右1为原图锐化,左2为Roberts边缘检测,右2为边缘检测锐化):
circuit=imread('rice.png');
I=circuit;
I=double(I);
h=[010
1-40
010];
J=conv2(I,h,'same');
K=I-J;
subplot(2,2,1),imshow(circuit)
subplot(2,2,2),imshow(K,[])
R=edge(circuit,'Roberts');
subplot(2,2,3),imshow(R)
R=double(R);
J=conv2(R,h,'same');
K=R-J;
subplot(2,2,4),imshow(K,[])
sobel边缘检测及锐化,结果如图(左1为原图,右1为原图锐化,左2为sobel边缘检测,右2为边缘检测锐化):
circuit=imread('rice.png');
I=circuit;
I=double(I);
h=[010
1-40
010];
J=conv2(I,h,'same');
K=I-J;
subplot(2,2,1),imshow(circuit)
subplot(2,2,2),imshow(K,[])
S=edge(circuit,'sobel');
subplot(2,2,3),imshow(S)
S=double(S);
J=conv2(S,h,'same');
K=R-J;
subplot(2,2,4),imshow(K,[])
Prewitt边缘检测及锐化,结果如图(左1为原图,右1为原图锐化,左2为Prewitt边缘检测,右2为边缘检测锐化):
circuit=imread('rice.png');
I=circuit;
I=double(I);
h=[010
1-40
010];
J=conv2(I,h,'same');
K=I-J;
subplot(2,2,1),imshow(circuit)
subplot(2,2,2),imshow(K,[])
P=edge(circuit,'prewitt');
subplot(2,2,3),imshow(P)
P=double(P);
J=conv2(P,h,'same');
K=R-J;
subplot(2,2,4),imshow(K,[])