检查(通常)一些光线柔和的颜色。有时他们会有一个有用的黑暗的边界,但其他时候(像这种情况下,他们将部分白色。成像对象在一个含有背景下设置自己的问题。我知道你没有设计的平板扫描仪的颜色,但它
可以
被改变,而且有充分的理由改变它。
首先,让我们尝试这样做。
inpict = imread (“check.jpg”);
outpict = im2gray (inpict);
outpict = imbothat (outpict (11));
[~,idx] = max (max (R, [], 1));
outpict = imrotate (outpict,角度,双线性的);
S = regionprops(面具,的边界框(“大小));
outpict = imcrop (outpict S.BoundingBox);
outpict = imrotate (inpict,角度,双线性的);
outpict = imcrop (outpict S.BoundingBox);
另一方面,假设你卡一张黑色的牛皮纸,感觉,或PVA泡沫扫描器盖子。这个示例图像不是很黑。一样的深灰色的灰尘和不均匀性,出现在之前的形象。
inpict = imread (“checkblack.jpg”);
graypict = im2gray (inpict);
掩码= imbinarize (graypict);
S = regionprops(面具,“minferetproperties”,的边界框(“大小));
[屏蔽矩形]= imcrop(面具,S.BoundingBox);
掩码= imrotate(面具,角度,“最近的”);
S = regionprops(面具,的边界框(“大小));
outpict = imcrop (inpict、矩形);
outpict = imrotate (outpict,角度,双线性的);
outpict = imcrop (outpict S.BoundingBox);
这不仅是更健壮,很明显
快
。它可能被进一步简化。
在第一个例子中,我们不能依赖subject-background对象边缘的对比告诉我们。没有保证,假设这个话题可以出现在任何位置或方向,我们必须做一些巨大的信仰的飞跃,几乎肯定会失败。我们必须依靠文本/线不够大胆的给我们的主导方向峰值。如果大规模的检查有某种模式,可以轻易毁掉我们找到方向的能力。例如:
我们必须依靠微妙的阴影和文本对比避免切断路由号码。我应该指出的是,当我说“微妙”,我指的是这个物体边缘不同于当地的背景,只有少数lsb在很多地方。
在第二个示例中,我们使用了一个极其简单的物理成像改变设置,帮助确保我们有很好的subject-background对比。这意味着我们可以更可靠地得到一个面具,干净地分离。我们可以直接从面罩定位信息,而不需要依赖任何的内部特性对比(如文本、线)的对象。
还有另一个小好处扫描在黑色背景,这只是它减少复印效应。如果你扫描在一个白色背景,你可能会发现,扫描双面打印的往往是污染的模糊图像文本页面的背面。检查也许并不重要,但有一件事需要考虑。大量的扫描仪有黑色覆盖,而不是白色,但是白色也有它的优点。