matlab中简单斑点的裁剪

matlab中简单斑点的裁剪,matlab,computer-vision,Matlab,Computer Vision,我有一张像这样的照片: 我试图分别裁剪出每个数字,因此我将得到一个仅包含数字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

我有一张像这样的照片:

我试图分别裁剪出每个数字,因此我将得到一个仅包含数字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 
这就是我得到的结果:


所以除了黑色的数字,我可以给所有的东西上色,但我不知道如何自己裁剪出来。我有图像处理工具包,因此如果有使用该工具包的快捷方式,请告诉我。

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

  • 将当前裁剪的图像从颜色转换为灰度
  • 找到一个二值化阈值(使用大津方法或类似方法)将图像转换为黑白
  • 以黑白模式运行连接的组件图像
  • 从每个组件(也称为blob)中,找到左侧、顶部、右侧、底部或边界矩形
  • 从图像中裁剪每个水滴
  • 虽然我希望全局二值化能够处理当前的结果图像,但如果不能,您可以尝试其他一些局部二值化方法,或者自适应二值化

    如果一个数字在二值化后分成多个部分——例如,如果“1”变成两个单独的斑点——那么在运行连接的组件之前,在黑色像素上运行一些形态学闭合(放大,然后腐蚀)迭代

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