Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在皮氏培养皿上计数菌落_Matlab_Image Processing_Grayscale_Threshold - Fatal编程技术网

Matlab 在皮氏培养皿上计数菌落

Matlab 在皮氏培养皿上计数菌落,matlab,image-processing,grayscale,threshold,Matlab,Image Processing,Grayscale,Threshold,我有一堆装满点的培养皿,我想在Matlab中数一数。这能可靠地批量完成吗 这个盘子有352个菌落 我尝试过ImageJ,但需要进行大量的边界裁剪,以获得可变的结果 你有什么建议吗?我想做的是: 将图像转换为可以使用 一些 请注意,这些点较亮,因此您可以在之后执行1-binaryImage 进入门槛。我不知道你为什么说它们是黑色的,但不管它们是什么颜色,都是一样的 之后,您可以使用并绘制 ρ和θ的 在这个柱状图上,你可以在ρ上取第二个阈值 ==半径 添加: 您可以使用一种称为“连接组件标签”的技

我有一堆装满点的培养皿,我想在Matlab中数一数。这能可靠地批量完成吗

这个盘子有352个菌落

我尝试过ImageJ,但需要进行大量的边界裁剪,以获得可变的结果

你有什么建议吗?

我想做的是:

  • 将图像转换为可以使用 一些 请注意,这些点较亮,因此您可以在之后执行
    1-binaryImage
    进入门槛。我不知道你为什么说它们是黑色的,但不管它们是什么颜色,都是一样的

  • 之后,您可以使用并绘制 ρ和θ的

  • 在这个柱状图上,你可以在ρ上取第二个阈值 ==半径

  • 添加:


    您可以使用一种称为“连接组件标签”的技术来区分图像中的不同对象

    首先,您需要通过某种阈值方法使图像二值化。标签是通过扫描每个像素行两次来完成的,一次从左到右,一次从右到左。我们正在寻找对象像素,即值为1的像素

    在从左到右的扫描中: 对于每个像素p:如果p是对象像素,则从上方或左侧复制标签。如果p是背景像素或p有标签,则不执行任何操作

    对于从右向左扫描: 对于每个像素p:如果p是对象像素,则从右侧复制标签(如果有), 否则设置一个新标签。如果p是背景像素或p有标签,则不执行任何操作。如果 标签存在并且p右侧的像素具有不同的标签,请记下这一点

    例如(来自于的讲座幻灯片):


    扫描完整个图像后,合并所有已标记的标签(它们连接到同一对象),然后计算不同标签的数量,然后进行计数。

    我解决此问题的方法如下:

  • 使用Hough变换识别与Petri培养皿相对应的圆
  • 使用大津方法的全局阈值,仅限于碟形
  • 将菌落计数为原始图像的区域最大值,在分割图像中表示
  • 这为我们提供了一个有效的圆形Hough变换。从那以后事情就很简单了:

    function [count,colonies,bw] = colony_count(I)
    
    I = rgb2gray(im2double(I)); %# Color-to-gray conversion.
    [m,n] = size(I);
    
    %# Uncomment this if you have might have some images with light background
    %# and dark colonies. It will invert any that seem that way.
    %#if graythresh(I) < 0.5
    %#    I = imcomplement(I);
    %#end
    
    bw = I > graythresh(I); %# Otsu's method.
    radii = 115:1:130; %# Approx. size of plate, narrower range = faster.
    h = circle_hough(bw,radii,'same','normalise'); %# Circular HT.
    peaks = circle_houghpeaks(h, radii, 'npeaks', 10); %# Pick top 10 circles.
    
    roi = true(m,n);
    for peak = peaks
        [x, y] = circlepoints(peak(3)); %# Points on the circle of this radius.
        x = x + peak(1); %# Translate the circle appropriately.
        y = y + peak(2);
        roi = roi & poly2mask(x,y,m,n); %# Cumulative union of all circles.
    end
    
    %# Restrict segmentation to dish. The erosion is to make sure no dish pixels
    %# are included in the segmentation.
    bw = bw & bwmorph(roi,'erode');
    
    %# Colonies are merged in the segmented image. Observing that colonies are 
    %# quite bright, we can find a single point per colony by as the regional
    %# maxima (the brightest points in the image) which occur in the segmentation.
    colonies = imregionalmax(I) & bw;
    
    %# Component labeling with 4-connectivity to avoid merging adjacent colonies.
    bwcc = bwconncomp(colonies,4);
    count = bwcc.NumObjects;
    
    我还上传了
    colony\u count
    功能。如果你有一个图像不起作用,但你认为应该,在那里留下评论

    计数是359,我想这很接近。您可以检查分段(
    遮罩
    )和菌落标记(
    菌落
    )以查看哪里出错:

    %# Leave out the changes to mask to just see the colony markers.
    %# Then you can see why we are getting some false colonies.
    R = I; R(mask) = 255; R(colonies) = 0;
    G = I; G(mask) = 0; G(colonies) = 255;
    B = I; B(mask) = 0; B(colonies) = 0;
    RGB = cat(3,R,G,B);
    imshow(RGB);
    

    我已经很久没有做过这样的事情了,也没有用过Matlab,但是你不需要用吗?那里一定有很多预先编写的脚本。有这个工具:用于工作,但我无法打开它。它抱怨没有特定的dll文件。是否尝试下载/安装.dll?请检查是否有正确版本的Matlab,等等@benedict_w我必须为该应用程序提供特定的Matlab编译器运行时。它会覆盖我当前的安装吗?请将示例图像中的菌落数计算为“地面真相”。为什么要使用Hough变换?这里没有要检测的线条。@wikipedia的nikie(链接在消息中)“在数字图像的自动分析中,经常会出现检测简单形状(如直线、圆或椭圆)的子问题”您使用了错误的链接吗?如果我按照你答案中的Hough变换链接,它清楚地说“使用Hough函数检测图像中的线条”@nikie我还添加了一个使用Hough变换检测圆的模块。我理解你描述的过程。我的图像增加了Petri培养皿边界的难度,这是一个麻烦,特别是因为它的颜色与点相似。。。这能在不进行物理移除的情况下消除吗?解释得很好,伙计@李昂杰谢谢,但希望没有人把他们的车牌放在白色背景上…@Li aungYip确实如此…但在HSV空间中,这个例子当然是微不足道的。这也是检查自动处理的任何数据的随机样本的一个很好的理由。作为一种概括,一种方法将完美地应用于您开发它所用的样本数据,但部分数据可能会违反您的假设。非常好的答案。最近发布的图像处理工具箱(12a)内置了一个用于循环Hough变换的新功能。
    %# Leave out the changes to mask to just see the colony markers.
    %# Then you can see why we are getting some false colonies.
    R = I; R(mask) = 255; R(colonies) = 0;
    G = I; G(mask) = 0; G(colonies) = 255;
    B = I; B(mask) = 0; B(colonies) = 0;
    RGB = cat(3,R,G,B);
    imshow(RGB);