clc;
clear;
z_p=10;
% I=imread('images of project\set 1\template.png');
% I=imread('images of project\set 2\template.tiff');
I=imread(['images of project\set 1\blister_mixed_',num2str(z_p,'%02d'),'.png']);
% I=imread(['images of project\set 2\bl-130-',num2str(z_p,'%02d'),'.tiff']);
I_de=dehazing_main(I);
I_gray=im2gray(I);
se=ones(80,80);
I_close=imclose(I_gray,se);
I_open=imopen(I_close,se);
% figure(z_p),subplot(221),imshow(I_gray),title('原始灰度图片');
% subplot(222),imshow(I_open),title('闭开运算后的灰度图片');
I_bw=imbinarize(I_open,0.5);
% subplot(223),imshow(I_bw),title('二值化后的灰度图片');
%统计标注连通域
%使用外接矩形框选连通域,并使用形心确定连通域位置
[l,b_n] = bwlabel(I_bw,8);
status_box_b=regionprops(l,'BoundingBox');
centroid_box = regionprops(l,'Centroid');
% subplot(224),imshow(I_gray),title('板标记图片');hold on;
% for i=1:b_n
% rectangle('position',status_box(i).BoundingBox,'edgecolor','r');
% text(centroid_box(i,1).Centroid(1,1)-15,centroid_box(i,1).Centroid(1,2)-15, num2str(i),'Color', 'r')
% end
%获取矩形中心点
center_xy=centroid_box(1).Centroid;
%获取矩形宽高
BoundingBox=status_box_b(1).BoundingBox(1,3:4)-[20,50];
%通过矩形中心坐标以及宽高获取每个分数的图像
I_Board=I_de(uint16(center_xy(1,2)-BoundingBox(1,2)/2):uint16(center_xy(1,2)+BoundingBox(1,2)/2),uint16(center_xy(1,1)-BoundingBox(1,1)/2):uint16(center_xy(1,1)+BoundingBox(1,1)/2),:);
I_Board_nor=I(uint16(center_xy(1,2)-BoundingBox(1,2)/2):uint16(center_xy(1,2)+BoundingBox(1,2)/2),uint16(center_xy(1,1)-BoundingBox(1,1)/2):uint16(center_xy(1,1)+BoundingBox(1,1)/2),:);
I_Board_hsv=rgb2hsv(I_Board);
I_Board_hsv(:,:,3)=I_Board_hsv(:,:,3)-I_Board_hsv(:,:,3)+0.5;
figure(1),subplot(221),imshow(I_Board_hsv),title('胶囊板图像');
%获取色度大和光度较弱的图像
[m,n,~] = size(I_Board);
I_UnW=double(zeros(m,n,3));
for i=1:m
for j=1:n
if((I_Board_hsv(i,j,2)>0.43 && I_Board_hsv(i,j,1)<0.6)==1)
I_UnW(i,j,1)=I_Board_hsv(i,j,1);
I_UnW(i,j,2)=I_Board_hsv(i,j,2);
I_UnW(i,j,3)=I_Board_hsv(i,j,3)+0.4;
end
end
end
I_UnW_rgb=hsv2rgb(I_UnW);
I_UnW_rgb=uint8(255.*I_UnW_rgb);
subplot(222),imshow(I_UnW_rgb),title('非白色胶囊板图像');
I_UnW_Gray=im2gray(I_UnW_rgb);
I_UnW_Gray=medfilt2(I_UnW_Gray,[3,3]);
se=ones(5,5);
I_UnW_Gray_Open=imopen(I_UnW_Gray,se);
%使用I_UnW_BW_maker作为maker,对I_UnW_BW_erode进行重构图像
I_UnW_Gray=imreconstruct(I_UnW_Gray_Open,I_UnW_Gray);
subplot(223),imshow(I_UnW_Gray),title('灰度图片');
I_UnW_BW=imbinarize(I_UnW_Gray,0.001);
subplot(224),imshow(I_UnW_BW),title('二值化后的灰度图片');
se=ones(8,8);
I_UnW_Gray_Close=imclose(I_UnW_BW,se);
figure(5),subplot(221),imshow(I_UnW_Gray_Close),title('闭运算后的灰度图片');
se=ones(16,16);
I_UnW_Gray_Erode=imerode(I_UnW_Gray_Close,se);
subplot(222),imshow(I_UnW_Gray_Erode),title('腐蚀后的灰度图片');
%使用I_UnW_BW_maker作为maker,对I_UnW_BW_erode进行重构图像
I_UnW_Gray=imreconstruct(I_UnW_Gray_Erode,I_UnW_Gray_Close);
subplot(223),imshow(I_UnW_Gray),title('腐蚀后的灰度图片');
%统计标注连通域
%使用外接矩形框选连通域,并使用形心确定连通域位置
[l,b_n] = bwlabel(I_UnW_Gray,8);
status_box=regionprops(l,'BoundingBox');
centroid_box = regionprops(l,'Centroid');
%%重新排序
for i=1:b_n
centriod(i,1:2)=centroid_box(i,1).Centroid(1,:);
centriod(i,3)=i;
% centriod(i,4)=0;
end
b_a=0;
for b=1:b_n
centriod_min=min(centriod(:,2));
for i=1:b_n
if centriod_min > centriod(i,2)
centriod_min=centriod(i,2);
end
end
flag=1;
for i=1:b_n
if (centriod(i,2) > (centriod_min - 15)) && (centriod(i,2) < (centriod_min + 50))
centriod_r(flag,:,b)=centriod(i,:);
centriod(i,1)=1000;
centriod(i,2)=1000;
b_a=b_a+1;
flag=flag+1;
end
end
for i=1:flag-1
for j=1:flag-1-i
if(centriod_r(j,1,b)>centriod_r(j+1,1,b))
[centriod_r(j,:,b),centriod_r(j+1,:,b)]=swap(centriod_r(j,:,b),centriod_r(j+1,:,b));
end
end
end
if b_a==b_n
break;
end
end
% template=load('set2template3.mat');
template=load('template.mat');
template=template.centriod_r;
[m,n,p]=size(centriod_r);
centriod_r_r=zeros(size(template));
q=1;
for i=1:p
flag=0;
for j=1:m
if(centriod_r(j,1,i))
flag=flag+1;
end
end
if flag>=2
for n=1:m
centriod_r_r(n,:,q)=centriod_r(n,:,i);
end
q=q+1;
end
end
[m,n,p]=size(template);
centriod_re=template;
for i=1:p
for j=1:m
centriod_re(j,3,i)=100;
end
end
for i=1:p
for j=1:m
for o=1:m
if (centriod_r_r(j,1,i) > (template(o,1,i) - 40)) && (centriod_r_r(j,1,i) < (template(o,1,i) + 30))
centriod_re(o,:,i)=centriod_r_r(j,:,i);
end
end
end
end
[m,n,p]=size(centriod_r_r);
centriod_t=centriod;
for i=1:p
for j=1:m
centriod((i-1)*m+j,:)=centriod_re(j,:,i);
centriod_t((i-1)*m+j,:)=template(j,:,i);
end
end
[b_t,~]=size(centriod);
template_box=load('template_box.mat');
% template_box=load('set2template_box');
template_box=template_box.status_box;
subplot(224),imshow(I_Board_nor),title('板标记图片');hold on;
for i=1:b_t
if centriod(i,3)~=100
if status_box(centriod(i,3)).BoundingBox(1,3)>template_box(centriod(i,3)).BoundingBox(1,3)-25 && status_box(centriod(i,3)).BoundingBox(1,3)<template_box(centriod(i,3)).BoundingBox(1,3)+40 && status_box(centriod(i,3)).BoundingBox(1,4)>template_box(centriod(i,3)).BoundingBox(1,4)-17 && status_box(centriod(i,3)).BoundingBox(1,4)<template_box(centriod(i,3)).BoundingBox(1,4)+40
rectangle('position',status_box(centriod(i,3)).BoundingBox,'edgecolor','g');
else
rectangle('position',template_box(centriod_t(i,3)).BoundingBox,'edgecolor','b');
% centriod_t(i,3)
template_box(centriod_t(i,3)).BoundingBox
end
else
rectangle('position',template_box(centriod_t(i,3)).BoundingBox,'edgecolor','r');
end
end
BoundingBox=zeros(1,2);
for i=1:b_n
if status_box(i).BoundingBox(1,3)>BoundingBox(1,1)
BoundingBox(1,1)=status_box(i).BoundingBox(1,3)+5;
end
if status_box(i).BoundingBox(1,4)>BoundingBox(1,2)
BoundingBox(1,2)=status_box(i).BoundingBox(1,4)+5;
end
end
BoundingBox=uint16(BoundingBox);
se=ones(5,15);
I_UnW_Gray_Close=imopen(I_UnW_Gray_Close,se);
for i=1:b_t
if centriod(i,3)~=100
if status_box(centriod(i,3)).BoundingBox(1,3)>template_box(centriod(i,3)).BoundingBox(1,3)-25 && status_box(centriod(i,3)).BoundingBox(1,3)<template_box(centriod(i,3)).BoundingBox(1,3)+40 && status_box(centriod(i,3)).BoundingBox(1,4)>template_box(centriod(i,3)).BoundingBox(1,4)-17 && status_box(centriod(i,3)).BoundingBox(1,4)<template_box(centriod(i,3)).BoundingBox(1,4)+40
temp=I_UnW_Gray_Close(uint16(status_box(centriod(i,3)).BoundingBox(1,2)):uint16(status_box(centriod(i,3)).BoundingBox(1,2)+status_box(centriod(i,3)).BoundingBox(1,4)),uint16(status_box(centriod(i,3)).BoundingBox(1,1)):uint16(status_box(centriod(i,3)).BoundingBox(1,1)+status_box(centriod(i,3)).BoundingBox(1,3)),:);
else
temp=I_UnW_Gray_Close(uint16(template_box(centriod_t(i,3)).BoundingBox(1,2)):uint16(template_box(centriod_t(i,3)).BoundingBox(1,2)+template_box(centriod_t(i,3)).BoundingBox(1,4)),uint16(template_box(centriod_t(i,3)).BoundingBox(1,1)):uint16(template_box(centriod_t(i,3)).BoundingBox(1,1)+
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB的胶囊缺陷检测.zip
共45个文件
png:13个
tiff:13个
m:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 127 浏览量
2023-12-07
22:54:05
上传
评论
收藏 19.18MB ZIP 举报
温馨提示
基于MATLAB的胶囊缺陷检测.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB的胶囊缺陷检测.zip (45个子文件)
Caspsule_Defect_dectection-main
Code
test_base_on_dehazing_hsv.m 13KB
template_box.mat 394B
README 109B
template.mat 484B
same_detect.m 2KB
set2template_box.mat 346B
background_Area.m 369B
dehazing_main.m 2KB
swap.m 41B
dice_similarity.m 732B
gradient_guidedfilter.m 1KB
Main_program_base_on_dehazing_hsv.m 14KB
images of project
set 1
blister_mixed_11.png 463KB
blister_mixed_05.png 476KB
blister_mixed_09.png 470KB
blister_mixed_01.png 661KB
template.png 621KB
blister_mixed_06.png 471KB
blister_mixed_10.png 460KB
blister_mixed_07.png 468KB
blister_mixed_02.png 498KB
blister_mixed_03.png 500KB
blister_mixed_08.png 463KB
blister_mixed_04.png 650KB
blister_mixed_12.png 469KB
set 2
bl-130-05.tiff 952KB
bl-130-07.tiff 952KB
bl-130-11.tiff 952KB
bl-130-01.tiff 952KB
bl-130-10.tiff 952KB
bl-130-06.tiff 952KB
bl-130-03.tiff 952KB
bl-130-02.tiff 952KB
bl-130-08.tiff 952KB
Template.tiff 952KB
bl-130-09.tiff 952KB
bl-130-04.tiff 952KB
bl-130-12.tiff 952KB
Idark.m 751B
bubble_sort.m 192B
printlabel.m 235B
boxfilter.m 979B
set2template3.mat 389B
代码解释.doc 4.98MB
ss.md 37B
共 45 条
- 1
资源评论
天天501
- 粉丝: 596
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功