对于一个学校项目,我已经构建了一个扫描仪并将其连接到matlab。扫描仪扫描从0到9的手写数字的图像(16×16像素)。我正在使用主成分分析来对扫描进行分类。由于扫描仪的准确性较低,我需要先对扫描进行预处理,然后再通过识别机器发送扫描。
其中一个预处理步骤是加粗线条。到目前为止,我已经使用了一个非常简单的平均过滤器:H = ones(3, 3) ./ 9
。这带来了问题,即数字8和9的圆形间隙可能是“闭合的”。我附上了所有预处理步骤的图片,其中问题是可见的:标题为“threshholded”的图像仍显示间隙,但在加厚步骤后它消失了。
我的问题是:你知道这个“加厚”步骤的更好的过滤器,这不会消除差距吗?或者你有一个过滤器的想法,可以在增稠后应用,以产生所需的结果?任何其他建议或提示也非常感谢。
答案 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))
保持差距,你可以从这里开始......
答案 1 :(得分:1)
不是一般的答案,但如果你有图像处理工具箱,而你的系统不依赖于多个灰度级,那么转换为二进制图像并使用bwmorph()
中的“加厚”操作应该做你想做的。
思考一点,你也可以使用适当加厚的二进制图像作为掩模来恢复空洞 - 要么只是元素地将它与模糊的灰度图像相乘,要么更灵活:
imclearborder()
删除背景,只留下漏洞即使没有形态学步骤,你也可以使用面具在以后人工重新引入原始洞,例如:
bgmask = (thresholdedimage == 0); % assuming 0 == background
holes = imclearborder(bgmask);
... % other processing steps
brightenedimage(holes) = 0; % punch holes in updated image