基于MATLAB静态目标分割的药板胶囊检测
一、目标
1 将药板从黑色背景中分离(药板部分显示为白色,背景显示为黑色);
2 根据分割结果将药板旋转至水平;
3 提取药板中的药丸的位置信息;
二、方法描述
处理图像如下:

(1)首先将图像转为灰度图像,并做二值化处理,并采用闭运算将胶囊边缘平滑处理。得到图像如下所示:

(2)利用imfill填充命令将胶囊填充,得到下图:

分别从图像中点左右各距100像素点位置向下遍历像素点,直到遍历到白色边缘即胶囊板的边缘停止,分别记录像素点的坐标,示意图如下:

由此计算胶囊板的倾斜角度θ=arctan(|X2-X1|/| Y2-Y1|),利用imrotate命令将图像旋转至水平。处理后图像如下图所示:
(3)将分别旋转水平的填充图像减去未填充图像得到下图:

利用regionprops命令分别得到图像各个区域中像素总个数,包含相应区域的最小矩形,每个区域的质心(重心)。标记得到每个胶囊的位置信息和标记位置信息。处理以及原图上的标记如下所示:

胶囊的质心位置信息如下表所示:

三、程序代码
clc;
I=imread('C:\Users\kkzhang\Desktop\1\xl-130-16.tiff');
a=rgb2gray(I);
figure(1)
imshow(I);
figure(2)
imshow(a);
x=size(a,1);
y=size(a,2);
g=zeros(x,y);
for i=1:1:x
for j=1:1:y
if(a(i,j)<120)
g(i,j)=0 ;
else
g(i,j)=255;
end
end
end %imshow(g);
fillg=zeros(x,y);
fillg=imfill(g,'holes');
%将胶囊的边缘平滑整齐
se=strel('square',5);
closeg=imclose(g,se);
figure(3)
imshow(closeg);
title('闭运算后') BW=edge(fillg,'roberts');
figure(5)
imshow(BW);
tiqu1=y/2-100;
tiqu2=y/2+100;
cishu1=0;
cishu2=0;
for i=1:1:x
if(cishu1==0)
if(g(i,tiqu1)==255)
x1=i;
cishu1=1;
end
end
end
for i=1:1:x
if(cishu2==0)
if(g(i,tiqu2)==255)
x2=i;
cishu2=1;
end
end
end
theta=atan(abs(x1-x2)/abs(tiqu2-tiqu1))*180/pi;
S = imrotate(BW,-theta);
A= imrotate(closeg,-theta);
B= imrotate(fillg,-theta);
I= imrotate(I,-theta);
BW=imrotate(BW,-theta);
C=B-A;
figure(6)
imshow(C); %标签定位
fill_write=B;
figure(4)
imshow(B);
start1=0;
start2=0;
for i=1:1:y
if(start1==0)
if(BW(i,y/2)==1)
sta_y=i;
start1=1;
end
end
end
for i=1:1:x
if(start2==0)
if(BW(i,x/2)==1)
sta_x1=i;
start2=1;
i=i+20;
end
end
if(start2==1)
if(BW(i,x/2)==1)
sta_x2=i;
start2=2;
end
end
end
sta_x=sta_x2-sta_x1;
for j=(sta_y+round(sta_x/3)):1:y
for i=1:1:x
fill_write(i,j)=0;
end
end
imshow(fill_write);
img = regionprops(fill_write,'boundingbox');
locate = cat(1,img.BoundingBox); T = graythresh(C);
bw_img = im2bw(C, T);
img_reg = regionprops(bw_img,'area', 'boundingbox','Centroid');
areas = [img_reg.Area];
rects = cat(1,img_reg.BoundingBox);
zhixin = cat(1,img_reg.Centroid);
figure(7);
imshow(I);
for i = 1:size(rects, 1)
rectangle('position', rects(i, :), 'EdgeColor', 'r');
hold on
plot(zhixin(i,1),zhixin(i,2),'ob');
hold on
end
for i = 1:size(locate, 1)
rectangle('position', locate(i, :), 'EdgeColor', 'r');
hold on
end
Don't wait for the perfect moment,take the moment and make it perfect!
转载需说明出处,笔者总结之前的知识,与大家分享,有问题的可以留给我哦~
基于MATLAB静态目标分割的药板胶囊检测的更多相关文章
- segMatch:基于3D点云分割的回环检测
该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...
- 基于MATLAB的adaboost级联形式的人脸检测实现
很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ...
- [ZZ] 基于Matlab的标记分水岭分割算法
基于Matlab的标记分水岭分割算法 http://blog.sina.com.cn/s/blog_725866260100rz7x.html 1 综述 Separating touching obj ...
- 基于MATLAB的离散小波变换
申明,本文非笔者原创,原文转载自: 基于Matlab的离散小波变换 http://blog.sina.com.cn/s/blog_725866260100ryh3.html 简介 在 ...
- VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...
- Selective Search for Object Recognition 论文笔记【图片目标分割】
这篇笔记,仅仅是对选择性算法介绍一下原理性知识,不对公式进行推倒. 前言: 这篇论文介绍的是,如果快速的找到的可能是物体目标的区域,不像使用传统的滑动窗口来暴力进行区域识别.这里是使用算法从多个维度对 ...
- 基于MATLAB边缘检测算子的实现
基于MATLAB边缘检测算子的实现 作者:lee神 1. 概述 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要 ...
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
- 基于MATLAB的腐蚀膨胀算法实现
本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...
随机推荐
- 如何在代码层面提供CPU分支预测效率
关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...
- C语言超全学习路线(收藏让你少走弯路)
刚入门是否觉得C语言很难?那可能是你还没找到正确的C语言学习路线,收藏以防找不到,让你少走弯路. 基本语法 选择控制语句 if,swith 循环控制语句 while,for 控制语句相关关键字分析 变 ...
- 引入『客户端缓存』,Redis6算是把缓存玩明白了…
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra. 在前面介绍两级缓存的文章中,我们总共给出了4种实现方案,在项目中整合了本地缓存Caffe ...
- C#/VB.NET 合并PDF页面
本文以C#及vb.net代码为例介绍如何来实现合并PDF页面内容.本文中的合并并非将两个文档简单合并为一个文档,而是将多个页面内容合并到一个页面,目的是减少页面上的空白区域,使页面布局更为紧凑.合理. ...
- vue 时间过滤器
过滤器:定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理).语法:1.注册过滤器: Vue.filter(name ,callback)或new Vue{filters:{}}2. ...
- 题解0011:图书管理(哈希、vector)
信奥一本通--哈希 里的例题2 题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1456 题目描述:两个命令,一个是进一本名字为s的图书,一个是 ...
- H5如何实现唤起APP
前言 写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载.这里就涉及到了H5与Native之 ...
- 【FAQ】分析服务导出的事件数据和概览页面展示的数据不一致该如何解决?
华为分析服务面向开发者提供两种数据展现方式:(1)事件数据下载,开发者可以将事件数据下载后导入到自有的分析系统中:(2)直接在AGC概览页面查看用户数和事件数. 问题描述 某开发者想将事件数据导入到自 ...
- MPLS基础与工作原理
MPLS Fundamental History of WAN Protocol 1970年代之前 第一个 WAN 用于将办公室与终端连接到大型机和小型计算机系统. 它是从办公室到数据中心的点对点连接 ...
- CentOS下sudo的使用和sudoers配置
一.sudo命令 sudo [参数选项] 命令 参数选项 -l:列出目前用户可执行与无法执行的指令: -v:延长密码有效期限5分钟: -u<用户>:以指定的用户作为新的身份.若不加上此参数 ...