MATLAB ヘルプ センター
指定された量子化レベルと出力値によるイメージの量子化
quant_A = imquantize(A,levels)
quant_A = imquantize(A,levels,values)
[quant_A,index] = imquantize(___)
quant_A = imquantize(A,levels) は、N 要素のベクトル levels に含まれる指定された量子化値を使用してイメージ A を量子化します。量子化されたイメージ quant_A のサイズは A と同じで、1 から N+1 の範囲にある N+1 個の離散整数値を含んでいます。この整数値は以下の条件で決まります。
quant_A
A
levels
A(k) ≤ levels(1) の場合は、quant_A(k) = 1。
A(k)
levels(1)
quant_A(k)
1
levels(m–1) < A(k) ≤ levels(m) の場合は、quant_A(k) = m。
levels(m–1)
levels(m)
m
A(k) > levels(N) の場合は、quant_A(k) = N+1。
levels(N)
N+1
例
quant_A = imquantize(A,levels,values) は、ピクセルに割り当てられる量子化値を指定します。
values
A(k) ≤ levels(1) の場合は、quant_A(k) = values(1)。
values(1)
levels(m–1) < A(k) ≤ levels(m) の場合は、quant_A(k) = values(m)。
values(m)
A(k) > levels(N) の場合は、quant_A(k) = values(N+1)。
values(N+1)
[quant_A,index] = imquantize(___) は以下の条件を満たす配列 index を返します。
index
quant_A = values(index)
values(index)
すべて折りたたむ
イメージを読み取ってグレースケールに変換し、結果を表示します。
I = imread("foggysf2.jpg"); I = rgb2gray(I); imshow(I) title("Grayscale Image")
2 つのしきい値レベルを計算します。
thresh = multithresh(I,2);
関数 imquantize を使用して、イメージを 3 つのレベルにセグメント化します。
imquantize
labels = imquantize(I,thresh);
関数 label2rgb を使用して、セグメント化したイメージをカラー イメージに変換し、イメージを表示します。
label2rgb
labelsRGB = label2rgb(labels); imshow(labelsRGB) title("Segmented Image")
RGB イメージを読み取って表示します。
I = imread("peppers.png"); imshow(I) 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 つのしきい値処理スキームの視覚的な違いを確認してください。
montage({quantRGB,quantPlane}) title("Full RGB Image Quantization vs. 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"); 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')
関数 multithresh から 7 つのしきい値を取得して、イメージを 8 つのレベルに分割します。
multithresh
thresh = multithresh(I,7);
各量子化間隔の最大値が出力イメージの 8 つのレベルに代入されるように、valuesMax ベクトルを作成します。
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 ベクトルを作成します。ベクトル valuesMin で imquantize をもう一度呼び出す代わりに、出力引数インデックスを使用して、これらの値を出力イメージに割り当てます。
valuesMin
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')
入力イメージは、任意の次元の数値配列として指定します。
量子化レベル。長さ N の数値ベクトルとして指定します。離散量子化レベルの値は、単調増加の順序でなければなりません。
量子化値。長さ N+1 の数値ベクトルとして指定します。
量子化後のイメージ。A と同じサイズの数値配列として返されます。入力引数 values が指定された場合、quant_A のデータ型は values と同じになります。それ以外の場合、quant_A のデータ型は double です。
double
マッピング配列。入力イメージ A と同じサイズの数値配列として返されます。この配列には、出力イメージを作成するために values にアクセスする整数インデックスが含まれており、quant_A = values(index) です。入力引数 values を指定しない場合、index = quant_A です。
データ型: double
すべて展開する
imquantize では C コードおよび C++ コードの生成がサポートされています (MATLAB® Coder™ が必要)。詳細については、イメージ処理のコード生成を参照してください。
backgroundPool
ThreadPool
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
imquantize は、スレッドベースの環境をサポートするようになりました。
multithresh | label2rgb | rgb2ind
rgb2ind
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
ヨーロッパ
アジア太平洋地域
最寄りの営業オフィスへのお問い合わせ