【发布时间】:2018-04-17 04:00:57
【问题描述】:
目前我正在使用数独网格并且我有二进制图像。我正在使用Regionprops 获取连接组件的区域,然后将图像的其余部分变为黑色。在此之后,我调用 OCR 方法来尝试读取数独数字。问题是这仅在图像中的数独网格笔直且直立的情况下才有效。如果它旋转一点,我就无法提取数字。这是我到目前为止的代码:
% get grid connected parts
conn_part = bwconncomp(im_binary);
% blacken area outside
stats = regionprops(conn_part,'Area');
im_out = im_binary; % Make mask
im_out(vertcat(conn_part.PixelIdxList{[stats.Area] < 825 | [stats.Area] > 2500})) = 0;
imagesc(im_out);
title("Numbers pulled");
sudokuNum = ocr(im_out,'TextLayout','Block','CharacterSet','0123456789');
sudokuNum.Text;
其中im_binary 是二值图像
im_out是输出图片
stats 是从regionprops 返回的对象,包含连通分量的区域
我知道我可以通过以下方式在获得 OCR 结果之前旋转图像:
im_out = imrotate(im_out, angle)
但是我不知道网格的角度是什么,因为这是循环多个图像的函数的一部分。我查看了regionprops 方法,因为我可以从那里拉出一个属性“方向”,但我不明白我将如何实际使用它。它还指出regionprops 将返回一个介于 -90 和 90 之间的值,但我的图像可以旋转 90 度以上。
【问题讨论】:
标签: matlab rotation image-rotation binary-image