imquantize
指定された量子化レベルと出力値によるイメージの量子化
構文
説明
例
2 つのしきい値を使用したイメージの 3 レベル セグメント化
イメージを読み取ってグレースケールに変換し、結果を表示します。
I = imread("foggysf2.jpg"); I = rgb2gray(I); imshow(I) title("Grayscale Image")
2 つのしきい値レベルを計算します。
thresh = multithresh(I,2);
関数 imquantize
を使用して、イメージを 3 つのレベルにセグメント化します。
labels = imquantize(I,thresh);
関数 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 レベルに変更
イメージ内の離散レベルの数を 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 = 1x8 uint8 row vector
65 88 119 149 169 189 215 255
[quant8_I_max, index] = imquantize(I,thresh,valuesMax);
同様に、各量子化間隔の最小値が出力イメージの 8 つのレベルに代入されるように、valuesMin
ベクトルを作成します。ベクトル valuesMin
で imquantize
をもう一度呼び出す代わりに、出力引数インデックスを使用して、これらの値を出力イメージに割り当てます。
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')
入力引数
A
— 入力イメージ
数値配列
入力イメージは、任意の次元の数値配列として指定します。
levels
— 量子化レベル
数値ベクトル
量子化レベル。長さ N の数値ベクトルとして指定します。離散量子化レベルの値は、単調増加の順序でなければなりません。
values
— 量子化値
数値ベクトル
量子化値。長さ N+1 の数値ベクトルとして指定します。
出力引数
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
imquantize
では C コードの生成がサポートされています (MATLAB® Coder™ が必要)。詳細については、イメージ処理のコード生成を参照してください。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2012b で導入R2021b: スレッドベース環境のサポート
imquantize
は、スレッドベースの環境をサポートするようになりました。
参考
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)