博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计细胞数量
阅读量:4447 次
发布时间:2019-06-07

本文共 3282 字,大约阅读时间需要 10 分钟。

统计图片中细胞的数量,问题来自于matlab自带的example。

Blob Analysis是对图像中相同灰度值的前景像素进行识别的一种方法。Blob就是灰度值相同的前景像素构成的连通域。Blob分析可为机器视觉应用提供图像中的blobs的数量、位置、形状和方向等信息,还可以提供相关blobs间的几何拓扑结构。

图像分割的结果就是所谓的Blob(binary large objects),在halcon中该数据类型被叫做“区域”。
在特征提取这一步,Blob的像素数,重心,方向等被计算出来。
例: 计算所有灰度值在120和255像素构成的8连通区域的面积与中心坐标。
read_image (Image, 'particle')
threshold (Image, BrightPixels, 120, 255)
connection (BrightPixels, Particles)
area_center (Particles, Area, Row, Column)

Blob翻译成中文,是“一滴”,“一抹”,“一团”,“弄脏”,“弄错”的意思。在计算机视觉中的Blob是指图像中的具有相似颜色、纹理等特征所组成的一块连通区域。显然,Blob分析其实就是将图像进行二值化,分割得到前景和背景,然后进行连通区域检测,从而得到Blob快的过程。简单来说,blob分析就是在一块“光滑”区域内,将出现“灰度突变”的小区域寻找出来。举例来说,假如现在有一块刚生产出来的玻璃,表面非常光滑,平整。如果这块玻璃上面没有瑕疵,那么,我们是检测不到“灰度突变”的;相反,如果在玻璃生产线上,由于种种原因,造成了玻璃上面有一个凸起的小泡、有一块黑斑、有一点裂缝。。。那么,我们就能在这块玻璃上面检测到纹理,颜色发生突变的部分,而这些部分,就是生产过程中造成的瑕疵,而这个过程,就是blob分析。显然,纺织品的瑕疵检测,玻璃的瑕疵检测,机械零件表面缺陷检测,可乐瓶缺陷检测,药品胶囊缺陷检测等很多场合都会用到blob分析。

%统计细胞数%[问题描述]用基本的形态学操作和blob分析来统计细胞数量。%每个细胞亮度不同,分割不太容易%[具体做法]先用腐蚀操作预处理,然后用blob分析来获取所有细胞%blob本意是binary large objects%blob分析,就是将二值化的图像中,灰度值相同的区域作为一个blob%处理完整张图片后,得到所有的blob对象%初始化VideoSize=[432 528];%创建视频读取系统对象filename = 'ecolicells.avi';hvfr = vision.VideoFileReader(filename, ...                              'ImageColorSpace', 'Intensity',...                              'VideoOutputDataType', 'single');%创建两个形态学腐蚀系统对象,用来移除不平均的光照强度,并加强边界hdilate1 = vision.MorphologicalDilate('NeighborhoodSource', 'Property', ...                   'Neighborhood', strel('square',7));hdilate2 = vision.MorphologicalDilate('NeighborhoodSource', 'Property', ...                   'Neighborhood', strel('square',7));%创建一个自动化阈值系统对象,用于灰度图到二值图的转化hautoth = vision.Autothresholder( ...  'Operator', '<=', ...  'ThresholdScaleFactor', 0.8);%创建一个Blob分析系统对象,用来找到被分割的细胞的重心hblob = vision.BlobAnalysis( ...                'AreaOutputPort', false, ...                'BoundingBoxOutputPort', false, ...                'OutputDataType', 'single', ...                'MinimumBlobArea', 7, ...                'MaximumBlobArea', 300, ...                'MaximumCount', 1500);%致谢:数据来源ackText = ['Data set courtesy of Jonathan Young and Michael Elowitz, ' ...             'California Institute of Technology'];    %创建播放视频的对象hVideo = vision.VideoPlayer;hVideo.Name = 'Results';hVideo.Position(1) = round(hVideo.Position(1));hVideo.Position(2) = round(hVideo.Position(2));hVideo.Position([4,3]) = 30 + VideoSize;%在循环中处理视频流frameCount = int16(1);while ~isDone(hvfr)    %读取一帧视频    image = step(hvfr);        %应用形态学腐蚀操作和图像计算的组合    %移除不平均的光照,以及加强细胞的边界        y1 = 2*image - step(hdilate1, image);    y1(y1<0) = 0;    y1(y1>1) = 1;    y2 = step(hdilate2, y1) - y1;        y3 = step(hautoth, y2); %图像二值化    Centroid = step(hblob, y3); %计算重心    numBlobs = size(Centroid, 1); %也计算细胞数量        %显示帧数和细胞数    frameBlobTxt = sprintf('Frame %d, Count %d', frameCount, numBlobs);    image = insertText(image, [1 1], frameBlobTxt, ...        'FontSize', 16, 'BoxOpacity', 0, 'TextColor', 'white');    image = insertText(image, [1 size(image,1)], ackText, ...        'FontSize', 10, 'AnchorPoint', 'LeftBottom', ...        'BoxOpacity', 0, 'TextColor', 'white');        %显示视频    image_out = insertMarker(image, Centroid, '*', 'Color', 'green');    step(hVideo, image_out);        frameCount = frameCount + 1;endrelease(hvfr); %关闭视频文件

转载于:https://www.cnblogs.com/zjutzz/p/5281633.html

你可能感兴趣的文章
sqoop/1.4.6/下载
查看>>
https协议及与http协议的比较
查看>>
mongodb数据备份与恢复
查看>>
ubuntu安装(owncloud-docker安装)
查看>>
(十一)tina | openwrt关闭调试串口(DEBUG UART)
查看>>
Android中获取TextView行数
查看>>
AngularJS 学习笔记值post传值
查看>>
maven+springMVC+mybatis+junit详细搭建过程
查看>>
iframe详细用法
查看>>
angularjs 使用angular-sortable-view实现拖拽效果(包括拖动完成后的方法使用)
查看>>
2015生命之旅---南京、南通、上海之行
查看>>
高精度练习之乘法(codevs_3117)
查看>>
小Z爱划水
查看>>
javascript中click和onclick的区别
查看>>
小程序BindTap快速连续点击页面跳转多次
查看>>
什么是架构?有几人说的清楚
查看>>
护士排班06
查看>>
大道至简:软件实践者的思想读后感
查看>>
Kiss MySQL goodbye for development and say hello to HSQLDB
查看>>
Python web多sitemap创建更新解决方案
查看>>