0

我有一张看起来像这样的图片: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

因此,除了黑色数字之外,我可以对所有内容进行着色,但我不确定如何自行裁剪每个数字。我有图像处理工具包,所以如果有使用它的快捷方式,请告诉我。

4

1 回答 1

1

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

  1. 将当前裁剪的图像从彩色转换为灰度。
  2. 找到一个二值化阈值(使用 Otsu 方法或类似方法)将图像转换为黑白。
  3. 在黑白上运行连接的组件图像。
  4. 从每个组件(又名 blob)中,找到左侧、顶部、右侧、底部或边界矩形。
  5. 从图像中裁剪每个 blob。

尽管我希望全局二值化可以与您当前的结果图像一起使用,但如果不能,您可以尝试其他一些局部二值化方法或自适应二值化。

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

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

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

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

于 2013-09-22T02:45:35.393 回答