0

我正在做一个关于离线手写识别的项目。在预处理阶段,我需要对二进制图像中的手写部分的大小和位置进行归一化。谁能告诉我如何只访问图像中的书写部分(黑色像素)和调整大小并移动其位置?

4

1 回答 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 回答