主要内容

细胞计数

这个示例展示了如何结合使用基本形态运算符和blob分析从视频流中提取信息。在本例中,该示例计算了每个视频帧中大肠杆菌的数量。注意,细胞的亮度是不同的,这使得分割任务更具挑战性。

初始化

使用下面的代码段初始化所需的变量和对象。

VideoSize = [432 528];

创建一个System对象从avi文件中读取视频。

文件名=“ecolicells.avi”;hvfr = VideoReader(文件名);

创建一个BlobAnalysis System对象来查找视频中分割的细胞的质心。

hblob =愿景。BlobAnalysis (...“AreaOutputPort”假的,...“BoundingBoxOutputPort”假的,...“OutputDataType”“单一”...“MinimumBlobArea”7...“MaximumBlobArea”, 300,...“MaximumCount”, 1500);%确认ackText = [数据集由乔纳森·杨和迈克尔·埃洛维茨提供...加州理工学院];

创建System对象来显示视频。

hVideo = vision.VideoPlayer;hVideo。Name =“结果”;hVideo.Position(1) =圆(hVideo.Position (1));hVideo.Position(2) =圆(hVideo.Position (2));hVideo。Position([4 3]) = 30+VideoSize;

流处理循环

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

frameCount = int16 (1);hasFrame (hvfr)%读取输入视频帧形象= im2gray (im2single (readFrame (hvfr)));结合形态学扩张和图像算法%的操作,以消除不均匀的照度和强调单元格之间的边界。Y1 = 2*image - imdilate(image, strel(“广场”7));日元(y1 < 0) = 0;y1 (> 1) = 1;Y2 = imdilate(y1, strel(“广场”7) - y1;th = multithresh (y2);%用大津法确定阈值Y3 = (y2 <= th*0.7); / /将图像二值化。质心= step(hblob, y3);%计算质心numBlobs =大小(重心,1);%和单元格数。%显示帧和单元格的数量。frameBlobTxt = sprintf ('帧%d,计数%d'frameCount numBlobs);image = insertText(image, [1 1], frameBlobTxt,...“字形大小”, 16岁,“BoxOpacity”0,“输入TextColor”“白色”);image = insertText(image, [1 size(image,1)], ackText,...“字形大小”10“AnchorPoint”“LeftBottom”...“BoxOpacity”0,“输入TextColor”“白色”);%显示视频image_out = insertMarker(图像,质心,‘*’“颜色”“绿色”);步骤(hVideo image_out);frameecount = frameecount + 1;结束

图结果包含一个轴对象和其他类型的uiflowcontainer, uimenu, uitoolbar对象。axis对象包含一个image类型的对象。

总结

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

数据集信用

这个例子的数据集是由加州理工学院的Jonathan Young和Michael Elowitz提供的。它是经允许使用的。有关此数据的其他信息,请参见

N. Rosenfeld, J. Young, U. Alon, P. Swain, M.B. Elowitz,“单细胞水平上的基因调控”,《科学》2005年第307卷,1962-1965页。