一、目标

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. sentinel基础概念及使用

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 什么是sentinel sentinel是Spring Cloud Al ...

  2. cnvd进阶学习

    说明 cnvd相对在src漏洞平台中还是比较具备含金量的.今天证书的申请标准就不说了,总归网上都有,主要是想分享下怎么去挖漏洞. 咱们这里只讲通用型漏洞,事件型的暂时我也没挖到.挖通用型漏洞主要方法就 ...

  3. 【前端干货】别再羡慕别人的Excel啦,教你点击按钮直接打开侧边栏!

    负责技术支持的葡萄又来啦. 三日不见,我们的客户又为我们发来新的问题. 这次我们需要实现的场景是在前端表格环境中,像模板按钮那样,点击之后弹出一个侧边栏,然后通过点击不同的单元格显示不同的内容. 挤接 ...

  4. [题解] [LOJ2743]「JOI Open 2016」摩天大楼

    题目大意 将 \(N\) 个互不相同的整数 \(A_1 , A_2 , ⋯ , A_N\) 任意排列成 \(B_1 , B_2 , ⋯ , B_N\) . 要求 \(∑^{N−1}_{i=1} |B_ ...

  5. 2021 CSP-J复赛 我的备战与游记

    目录 备战 2021.10.18 2021.10.19 2021.10.20 2021.10.21 2021.10.22 比赛当日 早上 线下见面 正文 比赛后 赛后总结与讲解 简单总结 Candy ...

  6. zabbix5.0报错PHP时区未设置(配置参数"date.timezone")

    解决办法 : #1.编辑文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,取消注释并设置为所在地时区 vim /etc/opt/rh/rh-php72/php- ...

  7. zabbix 1.2

    1.zabbix图形界面乱码问题处理 2.自定义监控项 (1)在agent端配置agent.conf    打开vim /etc/zabbix/zabbix-agent.conf    找到UserP ...

  8. zabbix脚本获取web status code,异常告警

    python代码,需要安装requests库 1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 import requests,os,sys 4 url ...

  9. 【算法】堆排序(Heap Sort)(七)

    堆排序(Heap Sort) 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父 ...

  10. Javabean使用实例

    1.login.jsp <%@ page language="java" contentType="text/html; charset=utf-8" p ...