2011-06-02 108 views
1

全部,如何在Matlab中拉伸图像

我需要知道如何拉伸图像以便进一步工作。

例如,我有接下来的两个图像:

enter image description hereenter image description here

我想这些数字将填补整个广场就像这样:

enter image description hereenter image description here

任何帮助将不胜感激。

回答

2

假设背景是一个常数值,并且图像没有任何不变的行,COLS,而有用的图像是在放大图像的背景中间的矩形:

colsWithImg = find(any(abs(diff(img)))); % idxs of cols with any img in it. 
rowsWithImg = find(any(abs(diff(img')))); 
imgWithNoBG = img(min(rowsWithImg):max(rowsWithImg),min(colsWithImg):max(colsWithImg)); 
% this will also work: but you will lose any constant rows/cols 
% imgWithNoBG = img(rowsWithImg,colsWithImg); 

现在你有一个图像没有背景假设你有图像处理工具箱,使用imresize很容易展开它。

resizedImg = imrezize(imgWithNoBG,newSize); 

要取出的工件,第一descritize所提取的字符:

descImg = floor((nDescLevels*imgWithNoBg)/max(max(imgWithNoBg))) 
colsNoArtifact = find(any(abs(diff(descImg)))); 
rowsNoArtifact = find(any(abs(diff(descImg')))); 

然后从非descritized图像

img3 = imgWithNoBG(min(rowsNoArtifact):max(rowsNoArtifact),min(colsNoArtifact):max(colsNoArtifact)); 

降低descritization级别的数量提取正确的行会有助于删除更多的神器,但会使它更容易错误地删除部分角色。我也预见到像1或7这样的数字会出现一些问题,部分角色可能会被误认为是神器。

+0

@BlessedKey感谢您的帮助,但它并没有帮助我。我正在得到我以前的东西。这可能是因为图像顶部有黑线。有什么建议么? – 2011-06-02 22:22:01

+0

@Michael Hrm。这听起来像是你想将“数字”部分与“神器”或“噪音”部分分开。用任意类型的噪音做这件事需要一些类型的OCR。如果您可以假设工件看起来像是图像顶部/底部或左侧/右侧的条形图,则可以进行快速简便的黑客入侵。只需重复我上面概述的背景删除过程,但仅限于提取的图像。如果工件内有小的变化,您可以先尝试将图像量化为少量的灰度级。 我已编辑回复以反映此情况。 – BlessedKey 2011-06-03 17:22:13

+0

@BlessedKey现在确实在切割黑色线条,但是nDescLevels的价值是什么,是否有一种方法可以为每个图像找出他的价值?就像你之前说的评论,如果它可以削减一部分数字,那么它就不是那么好,所以这只适用于这种情况。再次感谢 – 2011-06-03 20:53:33

0

图像的背景是黑色的?白色? 找到包围图像的最小矩形。而削减的命令IMG的边界(uppixel:downpoxil,leftpixel:rightpixel)

您可以通过for循环找到的最小的矩形,而不是在后台比较每个像素对边境

+0

你是什么意思“比较每个像素不在背景中对边界”。正如你所看到的,图像上方有黑线,我认为这可能会造成麻烦。你能给我一些代码示例吗?谢谢... – 2011-06-02 14:15:53