在matlab中裁剪出简单的blob

时间:2013-09-22 01:39:25

标签: matlab computer-vision

我的照片看起来像这样: http://i.imgur.com/Kev9jWd.png

我正在尝试单独裁剪每个数字,所以我最终会得到一个只包含0的图像数组,另一个只有1的图像数据等。在裁剪和灰度化原始图像之后,我有以下代码:

 for i = 1:351    
    if(capture_crop_gray(:, i, :) > 100)
        capture_crop(:, i, 1) = 255;  %red
    else
        %we found the front of a character
        for j = 1:301
            if(capture_crop_gray(j, i, :) > 100)
                capture_crop(j, i, 1) = 255;
            end
        end
    end
 end 

这是我得到的结果: http://i.imgur.com/li0clzE.png

所以除了黑色数字之外,我能够为所有颜色着色,但我不确定如何将它们自己裁剪掉。我有图像处理工具包,所以如果有使用它的快捷方式,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您可以在图像上运行连通分量算法,则应该能够找到图像中的每个数字,识别矩形边界,然后相应地裁剪/复制。有不同的方法可以解决这个问题,但以下内容应该相当简单:

  1. 将当前裁剪的图像从彩色转换为灰度。
  2. 查找二值化阈值(使用Otsu方法或类似方法)将图像转换为黑白。
  3. 以黑白方式运行连接的组件图像。
  4. 从每个组件(a.k.a.blob)中,找到左侧,顶部,右侧,底部或边界矩形。
  5. 从图像中裁剪每个斑点。
  6. 虽然我希望全局二值化能够与您当前的结果图像一起使用,但如果不能,您可以尝试其他一些局部二值化方法或自适应二值化。

    如果数字在二值化后分成多个部分 - 例如,如果“1”变成两个单独的斑点 - 则在运行连接的组件之前在黑色像素上运行几次形态学关闭(扩张,然后侵蚀)。

    看起来这些功能可能有所帮助:

    http://www.mathworks.com/help/images/ref/bwconncomp.html

    http://www.mathworks.com/help/images/ref/imcrop.html