一、目标

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静态目标分割的药板胶囊检测的更多相关文章

  1. segMatch:基于3D点云分割的回环检测

    该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...

  2. 基于MATLAB的adaboost级联形式的人脸检测实现

    很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ...

  3. [ZZ] 基于Matlab的标记分水岭分割算法

    基于Matlab的标记分水岭分割算法 http://blog.sina.com.cn/s/blog_725866260100rz7x.html 1 综述 Separating touching obj ...

  4. 基于MATLAB的离散小波变换

    申明,本文非笔者原创,原文转载自:  基于Matlab的离散小波变换         http://blog.sina.com.cn/s/blog_725866260100ryh3.html 简介 在 ...

  5. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]

    VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...

  6. Selective Search for Object Recognition 论文笔记【图片目标分割】

    这篇笔记,仅仅是对选择性算法介绍一下原理性知识,不对公式进行推倒. 前言: 这篇论文介绍的是,如果快速的找到的可能是物体目标的区域,不像使用传统的滑动窗口来暴力进行区域识别.这里是使用算法从多个维度对 ...

  7. 基于MATLAB边缘检测算子的实现

    基于MATLAB边缘检测算子的实现 作者:lee神 1.   概述 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要 ...

  8. 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现

    基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1.   背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...

  9. 基于MATLAB的腐蚀膨胀算法实现

    本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...

随机推荐

  1. 一行代码让你的项目轻松使用Dapr

    介绍 Dapr简化了云原生开发,让开发可以把焦点放在应用的业务逻辑上,从而让代码简单.可移植,那作为一个.Net开发者,我们也希望项目可以快速用上dapr,那究竟应该如何做呢? Dapr提出了Side ...

  2. 如何基于ZEGO SDK 实现通话质量监测

    如何基于ZEGO SDK 实现通话质量监测 1 功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 请参考 ...

  3. B08. BootstrapBlazor实战 Menu 导航菜单使用(2)

    接上篇: B08. BootstrapBlazor实战 Menu 导航菜单使用(1) 3.项目模板 节省时间,直接使用 Bootstrap Blazor App 模板快速搭建项目 传送门: https ...

  4. 树莓派开发笔记(十三):入手研华ADVANTECH工控树莓派UNO-220套件(二):安装rtc等驱动

    前言   前面运行了系统,本篇是安装对应套装的驱动,使rtc等外设生效,树莓派本身是不带rtc外设的.   UNO-220-P4N1AE 驱动下载     官方下载:https://www.advan ...

  5. 真香警告!JitPack 开源库集成平台

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介 官方介绍: JitPack 是一个用于 JVM 和 Android 项目的新颖的包存储库.它按需构建 Git 项目并为您提供即用 ...

  6. Idea之常用插件

    效率提升 Jrebel 热部署插件,修改代码编译就生效,节省大量重启服务时间.热部署支持修改方法代码,方法定义,类定义,接口定义(包括swagger文档),修改资源文件,修改mapper.xml(需配 ...

  7. 使用python获取交换机syslog日志并使用jQuery在html上展示

    需求 现网有部分pop点独立于海外,无法发送日志给内网日志服务器,同时最近网内有比较重要割接,所以临时写一个脚本来展示网内日志 思路 使用socket接收syslog数据,udp 514,数据部分格式 ...

  8. mybatis xml 中 trim 多余的符号

    <if test="(mac != null and mac != '') or (roomNo != null and roomNo != '') or (bedNo != null ...

  9. C# 给Word中的字符添加强调符号(着重号)

    在Word中添加着重号,即强调符号,可以在选中字符后,鼠标右键点击,选择"字体",在窗口中可直接选择"着重号"添加到文字,用以对重要文字内容起加强提醒的目的,如 ...

  10. 以人类 Person 为基类设计学生类 Student 和教师类 Teacher

    学习内容:实验二以人类 Person 为基类设计学生类 Student 和教师类 Teacher 示例代码: package 实验二; import java.util.Scanner; class ...