主要内容

细胞计数

此示例显示如何使用基本形态运算符和BLOB分析的组合来从视频流中提取信息。在这种情况下,该示例计算每个视频帧中的大肠杆菌细菌的数量。注意,细胞具有不同的亮度,这使得分割的任务更具挑战性。

初始化

使用以下部分代码才能初始化所需的变量和对象。

视频= [432 528];

创建一个系统对象以从AVI文件读取视频。

filename =.'Ecolicells.avi';HVFR = Videoreader(文件名);

创建一个blobanalysis system对象,以查找视频中分段单元格的质心。

hblob = Vision.BlobanAlysis(......'AreaOutputport',假,......'bandingboxoutputport',假,......'outputdatatype'“单身”......'MiniplingBlobarea'7,......'maintureblobarea'300,......'maintalcount',1500);%确认acktext = ['数据集提供了Jonathan Young和Michael Elowitz的礼貌,'......'加利福尼亚州理工学院'];

创建一个系统对象以显示视频。

hvideo = Vision.videoplayer;hvideo.name =.'结果';hvideo.position(1)= round(hvideo.position(1));hvideo.position(2)= round(hvideo.position(2));hvideo.position([4 3])= 30 +视频化;

流处理循环

创建一个处理循环以计算输入视频中的单元格数。此循环使用上面实例化的系统对象。

framecount = int16(1);尽管Hasfame(HVFR)%读取输入视频帧image = im2gray(im2single(ReadFrame(HVFR)));%应用形态扩张和图像算术的组合%操作以消除不均匀的照明,并强调细胞之间的%边界。Y1 = 2 *图像 -  Imdilate(图像,光线('Square',7));Y1(Y1 <0)= 0;Y1(Y1> 1)= 1;Y2 = Imdilate(y1,strel('Square',7)) -  Y1;th =多线程(Y2);%使用Otsu的方法确定阈值Y3 =(Y2 <= TH * 0.7);%二值化图像。Centroid =步骤(HBLOB,Y3);%计算质心numblobs =大小(质心,1);%和细胞数。%显示帧数和单元格数。frameblobtxt = sprintf('帧%d,计数%d',framecount,numblobs);image = InsertText(Image,[1 1],FrameBlobtxt,......'字体大小'16,'Boxopacity',0,'textcolor''白色的');image =插入文本(图像,[1尺寸(图像,1)],acktext,......'字体大小'10,'achorpoint''Leftbottom'......'Boxopacity',0,'textcolor''白色的');%显示视频image_out = InsertMarker(图像,质心,'*''颜色''绿色');步骤(hvideo,image_out);framecount = framecount + 1;结束

图结果包含轴和其他对象的UiflowContainer,Uimenu,UIToolbar类型。轴包含类型图像的对象。

概括

在结果窗口中,显示了原始视频,绿色标记表示细胞的质心位置。帧号和单元格数显示在左上角。

数据集学分

来自加州理工学院的Jonathan Young和Michael Elowitz提供了该示例的数据。它与许可一起使用。有关此数据的其他信息,请参阅

N. Rosenfeld,J. Young,U. Alon,P. Swain和M.B.Elowitz,“单细胞水平的基因调节”,Science 2005,Vol。307,pp 1962-1965。