3

次のようなドキュメント画像に大津二値化手法を実装しようとしています。

ここに画像の説明を入力

MATLAB でコードを実装する方法を教えてください。

4

4 に答える 4

7

ウィキペディア大津の方法より

I = imread('cameraman.tif');

ステップ 1.各強度レベルのヒストグラムと確率を計算します。

nbins = 256; % Number of bins
counts = imhist(I,nbins); % Each intensity increments the histogram from 0 to 255
p = counts / sum(counts); % Probabilities

ステップ 2.初期の omega_i(0) と mu_i(0) を設定する

omega1 = 0;
omega2 = 1;
mu1 = 0;
mu2 = mean(I(:));

ステップ 3. 0 から最大強度 (255) までのすべての可能なしきい値をステップスルーします。

ステップ 3.1 omega_i と mu_i を更新する

ステップ 3.2 sigma_b_squared の計算

for t = 1:nbins
    omega1(t) = sum(p(1:t));
    omega2(t) = sum(p(t+1:end));
    mu1(t) = sum(p(1:t).*(1:t)');
    mu2(t) = sum(p(t+1:end).*(t+1:nbins)');
end

sigma_b_squared_wiki = omega1 .* omega2 .* (mu2-mu1).^2; % Eq. (14)
sigma_b_squared_otsu = (mu1(end) .* omega1-mu1) .^2 ./(omega1 .* (1-omega1)); % Eq. (18)

ステップ 4必要なしきい値は、sigma_b_squared の最大値の位置に対応します

[~,thres_level_wiki] = max(sigma_b_squared_wiki);
[~,thres_level_otsu] = max(sigma_b_squared_otsu);

wiki バージョンの eq にはいくつかの違いがあります。(14) 大津と式。(18) 理由はわかりません。しかし、thres_level_otsuMATLABの実装に対応していますgraythresh(I)

于 2012-04-02T21:29:36.693 に答える
1

修正されたMATLAB実装(2Dマトリックス用)

function [T] = myotsu(I,N);

% create histogram

nbins = N; 

[x,h] = hist(I(:),nbins);

% calculate probabilities

p = x./sum(x);

% initialisation

om1 = 0; 

om2 = 1; 

mu1 = 0; 

mu2 = mode(I(:));


for t = 1:nbins,

    om1(t) = sum(p(1:t));
    om2(t) = sum(p(t+1:nbins));
    mu1(t) = sum(p(1:t).*[1:t]);
    mu2(t) = sum(p(t+1:nbins).*[t+1:nbins]);

end

    sigma = (mu1(nbins).*om1-mu1).^2./(om1.*(1-om1));


idx = find(sigma == max(sigma));

T = h(idx(1));
于 2012-05-30T11:20:29.693 に答える
1

graythreshMatlabの関数は Otsu メソッドを実装しているため、画像をグレースケールに変換し、im2bw関数を使用して、 によって返されるしきい値レベルを使用して画像を 2 値化する必要があります graythresh

画像をグレースケールに変換するにIは、次のコードを使用できます。

I = im2uint8(I);
if size(I,3) ~= 1
    I = rgb2gray(I);
end;

IbOtsu の方法を使用してバイナリ イメージを取得するには、次のコードを使用します。

Ib = im2bw(I, graythresh(I));

次の結果が得られるはずです。

ここに画像の説明を入力

于 2012-04-04T02:38:31.257 に答える
1

あなたの最初の質問がOTSUgraythreshのしきい値を実装していたことから始めて、MATLABの関数がその方法に基づいていることは真実です

歴史的な原稿のように見えるあなたの画像に関連して、文書画像のしきい値処理に使用できるすべての方法を比較するこの論文が見つかりました

ここから sauvola のしきい値をダウンロードして読むこともできます

その実装で頑張ってください =)

于 2012-04-08T12:58:22.747 に答える