我已经扫描了货币纸币的副本,我需要从中提取矩形纸币。 虽然扫描的副本背景非常空白,但音符本身可以正确旋转或对齐。我正在使用matlab。
示例输入:
示例输出:
我尝试过使用阈值和canny / sobel边缘检测无济于事。 我也尝试了here给出的解决方案,但是它会检测整个图像以进行裁剪,但它不适用于旋转的图像。
PS:我的主要目标是确定货币的面额。我认为可以使用几种方法:
您认为哪种方法最可行?
答案 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钱总是作为一个目标!)
希望这有帮助!