从扫描图像中提取矩形图像

时间:2014-10-27 10:27:04

标签: matlab image-processing crop image-segmentation edge-detection

我已经扫描了货币纸币的副本,我需要从中提取矩形纸币。 虽然扫描的副本背景非常空白,但音符本身可以正确旋转或对齐。我正在使用matlab。

示例输入:

enter image description here

示例输出:

enter image description here

我尝试过使用阈值和canny / sobel边缘检测无济于事。 我也尝试了here给出的解决方案,但是它会检测整个图像以进行裁剪,但它不适用于旋转的图像。

PS:我的主要目标是确定货币的面额。我认为可以使用几种方法:

  1. 基于颜色,因为所有纸币都有不同的原色。 这种方法的优点是它独立于 输入图像的旋转或缩放。
  2. 检测笔记左下角的黑色小三角形。这种形状是独特的 对于每个面额。
  3. 计算2张图片之间的差异。由于这是一个小项目,所有输入图像将具有相同的dpi和分辨率,因此,一旦对齐,输入和真实图像之间的差异可以给出粗略估计。
  4. 您认为哪种方法最可行?

1 个答案:

答案 0 :(得分:3)

看起来你比你看起来更先进(看到你的评论)哪个好!我会以更多或更少的方式向您展示解决问题的方法,但我不会发布整个代码,只是重要的部分。

您的图像非常裁剪和分割。首先,您需要确保图像没有孔。所以填补它们!

Iinv=I==0; % you want 1 in money, 0 in not-money;
Ifill=imfill(Iinv,8,'holes');     % Fill holes

之后,您只想获得图像的边界:

Iedge=edge(Ifill);

最后你想得到那个方块的角落:

C=corner(Iedge);

现在你有4个角,你应该能够知道这个旋转的“方形”的角度。一旦你做到了:

Irotate=imrotate(Icroped,angle);

一旦到了这里,您可能想要再次裁剪,最后只需要钱! (aaah钱总是作为一个目标!)

希望这有帮助!