如何在Matlab中用白色替换边框?

如何在Matlab中用白色替换边框?,matlab,Matlab,这是原始图像 我把它改成灰度,然后应用阈值 如原始图像所示,在应用上述两种方法后,仍存在一些阴影 但经过2种方法后,大多数图像都是完美的 我需要提取文本,所以我需要去除噪音。我几乎完成了这项工作,但问题是有些箱子有黑色边框,我想把它换成白色 我坚持只想让边界变成白色 我想创建一些白色矩形并用这些矩形填充边框,但我不知道怎么做 如何使用Matlab实现这一点? 任何其他方法都将不胜感激 如果您可以确定只有边框是黑色的,为什么不干脆裁剪图像,直到所有孤立的形状都是可识别的字符?类似于 done

这是原始图像

我把它改成灰度,然后应用阈值

如原始图像所示,在应用上述两种方法后,仍存在一些阴影

但经过2种方法后,大多数图像都是完美的

我需要提取文本,所以我需要去除噪音。我几乎完成了这项工作,但问题是有些箱子有黑色边框,我想把它换成白色

我坚持只想让边界变成白色

我想创建一些白色矩形并用这些矩形填充边框,但我不知道怎么做

如何使用Matlab实现这一点?
任何其他方法都将不胜感激

如果您可以确定只有边框是黑色的,为什么不干脆裁剪图像,直到所有孤立的形状都是可识别的字符?类似于

done = false;
ii = 1;
while (~done)

    % fill the outer border
    img(:,ii)       = 255;    img(ii,:)       = 255;
    img(:,end-ii+1) = 255;    img(end-ii+1,:) = 255;

    % (run your algorithms here. It positive match, done = true)

end
这可能是计算密集型的,因为您必须在每次迭代中进行模式识别,但您指出它只在“某些情况下”发生

否则,我怀疑也可以使用一些,可能是侵蚀或变薄或类似。但这样做的缺点是改变了你想要匹配的字符。但是,如果你必须处理的所有图像都像你展示的一样,我几乎不怀疑这会给你带来任何问题


中提到了一些检测直线的方法。我想说,您可以检测所有线条,并删除其中一条边上完全水平/垂直的线条(周围有一个小公差)。

您对如何创建白色矩形并填充黑色边框有什么建议吗?我认为这是一个更简单的方法,但我不知道它是否有效。我一点也不理解代码,但它似乎有效。但是如何增加行大小?@KritHoonsuwan:您是指删除的每一行的厚度?@KritHoonsuwan:冒号运算符(
)表示寻址列或行中的所有条目。如果将图像中的第一行设置为255,则将其设置为白色。在这里,我假设图像是一个
uint8
灰度位图,也就是说,每个像素都是灰色的,0表示黑色,255表示白色。所以,我用文字做了:将第1列中的所有行设置为白色,将第1行中的所有列设置为白色,将最后一列中的所有行设置为白色,将最后一行中的所有列设置为白色。ii=6;灰度图像(:,1:ii)=255;灰度图像(1:ii,:)=255;灰度图像(:,结束ii+1:end)=255;灰度图像(结束ii+1:end,:)=255;我试图理解形态学运算,但它对我来说似乎很复杂。相反,我只想创建白色矩形框并填充黑色边框。