机器视觉算法与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主讲人:王俊俊
实验目的
利用matlab对已知的图片做处理,选择图片中不符合要求的或者缺陷的胶囊,并将其框出。
实验算法
1.阈值分割
2.连通区域提取
3.轮廓特征
4.特征匹配
利用canny算子进行边缘检测
4
将图片二值化处
理
3
使用中值滤波提高图像清晰度
2
膨胀、腐蚀
5
计算特征距、图像匹配
6
实验步骤
将图片转化为灰度
图处理
1
I=imread('ima2.png'); subplot(1,2,1);
imshow(I);title('原图');
i=rgb2gray(I);
subplot(1,2,2);imshow(i);title('灰度
图')
灰度图
中值滤波
F0=imadjust(i,stretchlim(i),[0
1]);
Ft=medfilt2(F0,[5 5]);
subplot(1,2,2);imshow(i);
title('滤波')
二值化
%图像分割,一曲所需目标
的特征,背景显示为白色,
目标为黑色
level=graythresh(Ft);
BW=im2bw(Ft,level);
%图像二值化
%imshow(BW);title('二值化');
subplot(1,2,2);imshow(i);title
('二值化')
canny
%图像分割,一曲所需目标
的特征,背景显示为白色,
目标为黑色
level=graythresh(Ft);
BW=im2bw(Ft,level);
%图像二值化
%imshow(BW);title('二值化');
subplot(1,2,2);imshow(i);title
('二值化')
膨胀、腐蚀
%膨胀操作,膨胀系数需要调整,使得不牵连的两个膨胀后也不牵连
se90=strel('line',7,90);
se0=strel('line',7,0);
BW2=imdilate(BW1,[se90,se0]);
figure,imshow(BW2);title('膨胀');
裁剪
1.本本步骤的目的是为了剪裁出可以用于匹配的目标(1)imwrite(BW1,'BW.png');
BW5=BW1(82:177,160:212,:);
imwrite(BW5,'BW1-part.png');
figure;imshow('BW1-part.png');
(2)imwrite(BW2,'BW.png');
BW3=BW2(82:177,160:212,:);
imwrite(BW3,'BW2-part.png');
figure;imshow('BW2-part.png');
1.剪裁后
canny算子
2.剪裁后
获得特征
in_image1 = imread('BW2-part.png');
in_image1 = logical(in_image1);
[b,l]=bwboundaries(in_image1,'noholes'); stats= regionprops(l, 'All');
in_image1=stats.Image;
inv1=getfeature(in_image1);%计算特征距
进行图像匹配
image = imread('BWtwo.png');
image = ~logical(image);
image2=image;
se=strel('disk',2);
image=imclose(image,se);%待匹配图像
%in_image= imfill(in_image,'hole');
[B,L]=bwboundaries(image,'noholes'); %提取出来的是所有轮廓的边缘坐标
stats=regionprops(L,'All');%L中不同的正整数元素对应不同的区域;
figure;imshow(image2);
结果
for i=1:length(stats)
inv2=getfeature(stats(i).I
mage);
sim=match(inv2,inv1)
if(sim>1&&sim<1.1)
rectangle('position',stats
(i).BoundingBox,'edgecol
or','r');
end
figure(1);
end
两者的结果对比