我正在做一个关于离线手写识别的项目。在预处理阶段,我需要对二进制图像中的手写部分的大小和位置进行归一化。谁能告诉我如何只访问图像中的书写部分(黑色像素)和调整大小并移动其位置?
问问题
1102 次
1 回答
1
您的问题与图像处理领域一样广泛。没有一种方法可以将图像分割成前景和背景,因此您在此处找到的任何解决方案都适用于某些情况,但不适用于其他情况。但是,分割灰度图像的最基本方法是:
% invert your grayscale so text is white and background is black
gray_im = 1 - im2double(gray_im);
% compute the best global threshold
level = graythresh(gray_im);
% convert grayscale image to black and white based on best threshold
bw_im = im2bw(gray_im, level);
% find connected regions in the foreground
CC = bwconncomp(bw_im);
% if necessary, get the properties of those connected regions for further analysis
S = regionsprops(CC);
注意:许多人有更复杂的分割方法,这绝不是最好的方法。
后处理后,您将得到一张(或多张)仅包含单个字符的图像。要将大小调整为特定大小 M x N,请使用:
resized_bw = imresize(single_char_im, [M N]);
要改变它的位置,我知道的最简单的方法是使用circshift()
函数:
shifted_bw = circshift(resized_bw, [shift_pixels_up_down, shift_pixels_left_right]);
注意:circshift
包装移动的列或行,因此如果您的边界框太紧,最好的方法是填充您的图像,然后在新位置重新裁剪它。
于 2013-05-24T13:28:22.137 回答