ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

imquantize

指定された量子化レベルと出力値によるイメージの量子化

構文

quant_A = imquantize(A,levels)
quant_A = imquantize(___,values)
[quant_A,index] = imquantize(___)

説明

quant_A = imquantize(A,levels) は、N 要素のベクトル levels に含まれる指定された量子化値を使用してイメージ A を量子化します。出力イメージ quant_A のサイズは A と同じで、1 から N + 1 の範囲にある N + 1 個の離散整数値を含んでいます。これは、以下の条件で決まります。

  • A(k) ≤ levels(1) の場合は、quant_A(k) = 1

  • levels(m-1) < A(k)  ≤  levels(m) の場合は、quant_A(k) = m

  • A(k) > levels(N) の場合は、quant_A(k) = N + 1

imquantize は、2 つの陰的に定義された末端間隔に値を代入します。

  • A(k) ≤ levels(1)

  • A(k) > levels(N)

quant_A = imquantize(___,values) は、N + 1 要素のベクトル values を追加します。ここで、N = length(levels) です。valuesN + 1 個の要素は、それぞれ quant_A 内の N + 1 の離散ピクセル値のいずれかに対して量子化値を指定します。

  • A(k) ≤ levels(1) の場合は、quant_A(k) = values(1)

  • levels(m-1) < A(k)  ≤  levels(m) の場合は、quant_A(k) = values(m)

  • A(k) > levels(N) の場合は、quant_A(k) = values(N + 1)

[quant_A,index] = imquantize(___) は以下の条件を満たす配列 index を返します。

quant_A = values(index)

すべて折りたたむ

イメージを読み取り、それを表示します。

I = imread('circlesBrightDark.png');
imshow(I)
axis off
title('Original Image')

2 つのしきい値レベルを計算します。

thresh = multithresh(I,2);

imquantize を使用してイメージを 3 つのレベルにセグメント化します。

seg_I = imquantize(I,thresh);

label2rgb を使用してセグメント化したイメージをカラー イメージに変換し、それを表示します。

RGB = label2rgb(seg_I); 	 
figure;
imshow(RGB)
axis off
title('RGB Segmented Image')

トゥルーカラー (RGB) イメージを読み取り、それを表示します。

I = imread('peppers.png');
imshow(I) 
axis off
title('RGB Image');

RGB イメージ全体から 7 つのレベルのしきい値を生成します。

threshRGB = multithresh(I,7);

RGB イメージの平面ごとにしきい値を生成します。

threshForPlanes = zeros(3,7);			

for i = 1:3
    threshForPlanes(i,:) = multithresh(I(:,:,i),7);
end

イメージ全体から計算された一連のしきい値を使用してイメージ全体を処理します。

value = [0 threshRGB(2:end) 255]; 
quantRGB = imquantize(I, threshRGB, value);

指定された平面から計算されたしきい値ベクトルを使用して各 RGB 平面を個別に処理します。各 RGB 平面で生成されたしきい値ベクトルを使用してその平面を量子化します。

quantPlane = zeros( size(I) );

for i = 1:3
    value = [0 threshForPlanes(i,2:end) 255]; 
    quantPlane(:,:,i) = imquantize(I(:,:,i),threshForPlanes(i,:),value);
end

quantPlane = uint8(quantPlane);

ポスタリゼーションされた両方のイメージを表示して、2 つのしきい値処理スキームの視覚的な違いを確認してください。

imshowpair(quantRGB,quantPlane,'montage') 
axis off
title('Full RGB Image Quantization        Plane-by-Plane Quantization')

結果を比較するには、各出力イメージにおける一意の RGB ピクセル ベクトルの数を計算します。完全な RGB イメージ スキームよりも平面ごとのしきい値処理スキームのほうが、生成されている色が 23% 多くなっています。

dim = size( quantRGB );
quantRGBmx3   = reshape(quantRGB,   prod(dim(1:2)), 3);
quantPlanemx3 = reshape(quantPlane, prod(dim(1:2)), 3);

colorsRGB   = unique(quantRGBmx3,   'rows' );
colorsPlane = unique(quantPlanemx3, 'rows' );

disp(['Unique colors in RGB image            : ' int2str(length(colorsRGB))]);
Unique colors in RGB image            : 188
disp(['Unique colors in Plane-by-Plane image : ' int2str(length(colorsPlane))]);
Unique colors in Plane-by-Plane image : 231

イメージ内の離散レベルの数を 256 から 8 に減らします。この例では、2 つの異なる方法を使用して 8 つの出力レベルのそれぞれに値を割り当てます。

イメージを読み取り、それを表示します。

I = imread('coins.png');
imshow(I) 
axis off
title('Grayscale Image')

multithresh から 7 つのしきい値を取得して、イメージを 8 つのレベルに分割します。

thresh = multithresh(I,7);

各量子化間隔の最大値が出力イメージの 8 つのレベルに代入されるように、valuesMax ベクトルを作成します。

valuesMax = [thresh max(I(:))]
valuesMax = 1×8 uint8 row vector

    65    88   119   149   169   189   215   255

[quant8_I_max, index] = imquantize(I,thresh,valuesMax);

同様に、各量子化間隔の最小値が出力イメージの 8 つのレベルに代入されるように、valuesMin ベクトルを作成します。ベクトル valuesMinimquantize をもう一度呼び出す代わりに、出力引数インデックスを使用して、これらの値を出力イメージに割り当てます。

valuesMin = [min(I(:)) thresh]
valuesMin = 1×8 uint8 row vector

    23    65    88   119   149   169   189   215

quant8_I_min = valuesMin(index);

両方の 8 レベルの出力イメージを並べて表示します。

imshowpair(quant8_I_min,quant8_I_max,'montage') 
title('Minimum Interval Value           Maximum Interval Value')

入力引数

すべて折りたたむ

入力イメージは、任意の次元の数値配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

量子化レベルは、N 要素のベクトルとして指定します。離散量子化レベルの値は、単調増加の順序でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

量子化値は、N + 1 要素のベクトルとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

量子化された出力イメージは、A と同じサイズの数値配列として返されます。入力引数 values が指定された場合、quant_A のデータ型は values と同じになります。values が指定されない場合、quant_A は double クラスになります。

マッピング配列。入力イメージ A と同じサイズの配列として返されます。出力イメージを作成するために values にアクセスする整数インデックスが含まれており、quant_A = values(index) です。入力引数 values が定義されていない場合は、index = quant_A となります。

データ型: double

拡張機能

R2012b で導入

この情報は役に立ちましたか?