如何去除图像水平和垂直线条?

110(30天)
你好,我女士在手写数字OCR,为此我需要段数的每一位(4 - 7位数),然后将这些数字神经分类数,每件事是好的但分割将框线之间的联系(包含数量)和数字图像。
因此,有可能的方法删除行吗?

接受的答案

图像分析
图像分析 2021年8月21日
试试这一开始。继续发展你的项目推广它的其他图像。
%演示图像分析
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像
grayImage = imread (“numbers.jpeg”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2 2 1);
imshow (grayImage []);
轴(“上”,“图像”);
标题(原始图像的,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
drawnow;
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
%提取红色通道(红色线会是白色)。
grayImage = grayImage (:: 2);
结束
%作物白色框架。
掩码= bwareafilt (grayImage < 255,1);
道具= regionprops(面具,的边界框(“大小));
次要情节(2,2,2);
grayImage = imcrop (grayImage props.BoundingBox);
imshow (grayImage);
轴(“上”,“图像”);
标题(灰度图像的,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
次要情节(2、2、3);
imhist (grayImage);
网格;
包含(“灰度”,“字形大小”、字形大小);
ylabel (“像素”,“字形大小”、字形大小);
%交互式阈值图像。
lowThreshold = 0;
highThreshold = 51;
%裁判://www.tianjin-qmedu.com/matlabcentral/fileexchange/29372-thresholding-an-image?s_tid=srchtitle
% (lowThreshold highThreshold] =阈值(lowThreshold、highThreshold grayImage)
%的阈值。
掩码= grayImage < highThreshold;
%找出区域。
道具= regionprops(面具,“区域”);
allAreas =排序([props.Area],“下”)
次要情节(2、2、4);
%保持地区只有他们大于500像素,小于2000像素。”
掩码= bwareafilt(面具,(500、20000));
imshow(面具);
%与8-connectivity标签每个团,所以我们可以测量它
[labeledImage, numberOfBlobs] = bwlabel(面具,8);
%应用各种各样的假彩色区域。
coloredLabelsImage = label2rgb (labeledImage,“hsv”,“k”,“洗牌”);
%显示伪色彩图像。
imshow (coloredLabelsImage);
标题= sprintf (“最后的面具”);
标题(标题,“字形大小”、字形大小);

更多的答案(3)

为副总经理
为副总经理 2021年8月21日
编辑:为副总经理 2021年8月21日
我会把我自己的。它使用的脚腕()和houghpeaks()纠正图像,以便矩形过滤器将与盒子边缘对齐。剩下的只是普通过滤。感兴趣的参数是二值化的敏感性,过滤器宽度和bwareaopen中指定的区域()调用。
更健壮的解决方案可以更好地利用踝关节()在一个受限制的角度更好的识别范围框的边框用更少的依赖于过滤隔离箱从文本。这只是一个想法,而不是一个确定的建议。
inpict = imread (“ocrbox.jpg”);
inpict = rgb2gray (cropborder (inpict[南南南南]));% cropborder来自MIMT FEX
inpict = ~ imbinarize (inpict“自适应”,“foregroundpolarity”,“黑暗”,“敏感”,0.15);
%找到主导线角,纠正
[H T R] =踝关节(inpict);
P = houghpeaks (H, 1,“阈值”装天花板(0.3 *马克斯(H (:))));
th0 = 90 - t (P (1、2));
inpict = imrotate(双(inpict), -th0,双线性的,“作物”);
w = 100;
linemask = medfilt2 (inpict [1 w]) + medfilt2 (inpict [w 1]);
linemask = bwareaopen (linemask > 0.5,500);
linemask = imdilate (linemask strel (“磁盘”5));
inpict = bwareaopen (inpict & ~ linemask, 200);
imshow (inpict)
的评论,cropborder()从MIMT文件交换。这仅仅是必要的,因为图像是一个保存人物提供了不必要的填充。因为你有原始图像,你不需要什么作物。
不保存图像通过保存图。节省实际的图像,而不是形象的一个屏幕快照。

图像分析
图像分析 2021年8月20日
看到
你也可以尝试一个形态学开抹去,尽管它可能会影响你的数字。
或者你可以试着脚腕()或houghlines()来看看你能不能找到线条和消除的。
一个算法,可能工作在这个特定的图像可能会失败在其他图像。
祝你好运。
1评论
mutasam hazzah
mutasam hazzah 2021年8月21日
谢谢你的回复。
实际上我试着OCR im matlab和踝关节()但我不能得到的结果由于线条和数字之间的联系。

登录置评。


darova
darova 2021年8月21日
这是一个尝试。使用 bwlabel 然后每个地区分离和分析
I0 = imread (“image.jpeg”);
I1 = im2bw(钱数,0.2);
I2 = imdilate (I1, (2));% imopen (I1, (3));
imshow (I2)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!