图像降噪OCR

时间:2012-07-29 20:18:31

标签: matlab image-processing ocr image-segmentation noise-reduction

您好我在下面的图片细分问题。这是需要识别的有色人物。我正在使用锐化,维纳去模糊和维纳平滑。之后,我用模糊c分割图片意味着聚类(3级)。但是在字母E的情况下,我得到的最好的是没有锐化,去模糊和平滑,只是使用阈值fcm分割。然而,我应该得到比这更好的结果,在那里我可以将这两个部分作为一个整体组合(不仅仅是上部白色部分而另一半是黑色部分)。

我怎样才能解决这个问题,使其更加健壮并与其他图像一起使用,例如图片中的5? 5的结果是在fcm聚类之上进行锐化,去抖和平滑。我怎么能让它更加连接呢?

我真的很感激我能得到的任何帮助,拜托,哦,我在matlab中这样做...所以从那里得到任何帮助会很高兴,谢谢!

This is letter E, i would like to get one element as a whole

Second pic is number 5, should be more smooth and connected, without any spaces between lines

编辑:

我的以下代码是这样的:     函数[bw,level] = fcmthresh(IM,sw)     if(nargin< 1)         错误('你必须提供图像。');     elseif(nargin == 1)         SW = 0;     elseif(sw~ = 0&& sw~ = 1)         错误('sw必须为0或1');     端

data=reshape(IM,[],1);
[center,member]=fcm(data,3);
[center,cidx]=sort(center);
member=member';
member=member(:,cidx);
[maxmember,label]=max(member,[],2);
if sw==0
    level=(max(data(label==1))+min(data(label==2)))/2;
else
    level=(max(data(label==2))+min(data(label==3)))/2;
end
bw=im2bw(IM,level);

function img=wienerDeblur(im)
ImgNoisyBlurry = im2double(im);
PSF = fspecial('laplacian'); %LEN, THETA add parameters for 'motion'

noise_var = 0.0001; %0.0001
estimated_nsr = noise_var / var(ImgNoisyBlurry(:));
wnr3 = deconvwnr(ImgNoisyBlurry, PSF, estimated_nsr);
img = wnr3;

end

H = fspecial('unsharp');
im = imfilter(im,H,'replicate');
im = wienerDeblur(im);
im = wienerSmoothing(im);

这就是所有的代码,加上我只使用字母E的fcmthres,因为它的效果最好。 我读到了关于形态学图像处理(扩张,侵蚀)的信息,因此也许可以做到这一点。

是否有更好的图像对比和噪音去除技术?

2 个答案:

答案 0 :(得分:1)

您可以在h通道上尝试精确边缘检测(尝试所有通道并进行比较)(rgb2hsv),然后进行形态学操作以关闭曲线并填充(填充)数字和字母的曲线。 我现在无法访问matlab,但在类似的问题上取得了成功。

http://www.mathworks.se/help/techdoc/ref/rgb2hsv.html http://www.mathworks.se/help/toolbox/images/ref/edge.html http://www.mathworks.se/help/toolbox/images/ref/imfill.html

答案 1 :(得分:0)

在黑白之后你可以使用奇异值分解(http://en.wikipedia.org/wiki/Singular_value_decomposition),你可以比较奇异值。

对于噪声消除,将较小的奇异值设置为0.