线加厚图像滤波器,用于扫描数字的预处理

时间:2014-02-04 20:47:55

标签: matlab image-processing filtering

对于一个学校项目,我已经构建了一个扫描仪并将其连接到matlab。扫描仪扫描从0到9的手写数字的图像(16×16像素)。我正在使用主成分分析来对扫描进行分类。由于扫描仪的准确性较低,我需要先对扫描进行预处理,然后再通过识别机器发送扫描。

其中一个预处理步骤是加粗线条。到目前为止,我已经使用了一个非常简单的平均过滤器:H = ones(3, 3) ./ 9。这带来了问题,即数字8和9的圆形间隙可能是“闭合的”。我附上了所有预处理步骤的图片,其中问题是可见的:标题为“threshholded”的图像仍显示间隙,但在加厚步骤后它消失了。

enter image description here

我的问题是:你知道这个“加厚”步骤的更好的过滤器,这不会消除差距吗?或者你有一个过滤器的想法,可以在增稠后应用,以产生所需的结果?任何其他建议或提示也非常感谢。

2 个答案:

答案 0 :(得分:2)

I=imread('numberreco.png');
subplot(1,2,1),imshow(I)
I=rgb2gray(I);
BW=~im2bw(I,graythresh(I));
 BW2 = bwmorph(BW,'thin');
 I1=double(I).*BW2;
subplot(1,2,2),imshow(uint8(I1))

enter image description here

保持差距,你可以从这里开始......

答案 1 :(得分:1)

不是一般的答案,但如果你有图像处理工具箱,而你的系统不依赖于多个灰度级,那么转换为二进制图像并使用bwmorph()中的“加厚”操作应该做你想做的。

思考一点,你也可以使用适当加厚的二进制图像作为掩模来恢复空洞 - 要么只是元素地将它与模糊的灰度图像相乘,要么更灵活:

  • 将其反转以形成背景/孔掩模
  • 使用imclearborder()删除背景,只留下漏洞
  • 可选择扩张面具
  • 用作逻辑索引来清除模糊/增亮灰度图像的“空洞”区域。

即使没有形态学步骤,你也可以使用面具在以后人工重新引入原始洞,例如:

bgmask = (thresholdedimage == 0);  % assuming 0 == background
holes = imclearborder(bgmask);
... % other processing steps
brightenedimage(holes) = 0;  % punch holes in updated image