私はオフラインの手書き認識に関するプロジェクトを行っています.前処理段階で、バイナリ画像の手書き部分をサイズと位置で正規化する必要があります.画像の書き込み部分(黒いピクセル)だけにアクセスする方法を教えてください。サイズを変更して位置を移動しますか?
質問する
1102 次
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);
注: 多くの人がより洗練されたセグメント化方法を持っていますが、これは決して最良の方法ではありません。
後処理の後、単一の文字のみを含む 1 つ (または複数) の画像が作成されます。特定のサイズ 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 に答える