Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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("foggysf2.jpg");
I = rgb2gray(I);
imshow(I)
title("Grayscale Image")

Figure contains an axes object. The axes object with title Grayscale Image contains an object of type image.

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

thresh = multithresh(I,2);

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

labels = imquantize(I,thresh);

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

labelsRGB = label2rgb(labels);
imshow(labelsRGB)
title("Segmented Image")

Figure contains an axes object. The axes object with title Segmented Image contains an object of type image.

RGB イメージを読み取って表示します。

I = imread("peppers.png");
imshow(I) 
title("RGB Image");

Figure contains an axes object. The axes object with title RGB Image contains an object of type 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 つのしきい値処理スキームの視覚的な違いを確認してください。

montage({quantRGB,quantPlane}) 
title("Full RGB Image Quantization vs. Plane-by-Plane Quantization")

Figure contains an axes object. The axes object with title Full RGB Image Quantization vs. Plane-by-Plane Quantization contains an object of type image.

結果を比較するには、各出力イメージにおける一意の 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");
disp("Unique colors in RGB image: "+length(colorsRGB));
Unique colors in RGB image: 188
colorsPlane = unique(quantPlanemx3,"rows");
disp("Unique colors in plane-by-plane image: "+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')

Figure contains an axes object. The axes object with title Grayscale Image contains an object of type image.

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

thresh = multithresh(I,7);

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

valuesMax = [thresh max(I(:))]
valuesMax = 1x8 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 = 1x8 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')

Figure contains an axes object. The axes object with title Minimum Interval Value Maximum Interval Value contains an object of type image.

入力引数

すべて折りたたむ

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

データ型: 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

拡張機能

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2012b で導入

すべて展開する