ドキュメンテーション

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

imlincomb

イメージの線形結合

構文

Z = imlincomb(K1,A1,K2,A2,...,Kn,An)
Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K)
Z = imlincomb(___,output_class)
gpuarrayZ = imlincomb(gpuarrayK,gpuarrayA,___,output_class)

説明

Z = imlincomb(K1,A1,K2,A2,...,Kn,An) は次の式を計算します。

K1*A1 + K2*A2 + ... + Kn*An

ここで、K1, K2, ...... Kn は、実数の double のスカラーで、A1, A2, ...... An は、同じクラスとサイズをもつ実数の非スパース数値配列です。ZA1 とクラスおよびサイズが同じです。ただし、A1 が論理値の場合は Z が double になります。

Z = imlincomb(K1,A1,K2,A2,...,Kn,An,K) は次の式を計算します。

K1*A1 + K2*A2 + ... + Kn*An + K

ここで、imlincomb は、実数で、double のスカラー K を追加し、K1 から Kn までの積と A1 から An までの積の和を計算します。

Z = imlincomb(___,output_class) によって、Z のクラスを指定します。output_class は、数値クラスの名前を含む文字ベクトルです。

gpuarrayZ = imlincomb(gpuarrayK,gpuarrayA,___,output_class) は GPU で処理を実行します。入力値 gpuarrayKgpuarrayA は gpuArray で、出力値 gpuarrayZ は gpuArray です。この構文では Parallel Computing Toolbox™ が必要です。

一組のイメージに一連の代数演算を適用する場合、imlincomb を使用して、演算を組み合わせた場合、imadd のように個々の代数関数を入れ子にして呼び出すより、むしろ、より精度の高いものが得られます。代数関数への入れ子の呼び出しを行う場合、入力配列は整数のクラスになり、個々の関数は、次の関数に渡される前に、打ち切られ、丸められるため、最終結果の精度は低下します。imlincomb は、倍精度浮動小数点で、出力 Z の各要素を個々に計算します。Z が整数配列の場合、imlincomb は、整数型の範囲を超える Z の要素を切り捨て、小数部の値を丸めます。

すべて折りたたむ

イメージをワークスペースに読み取ります。

I = imread('cameraman.tif');

線形結合で係数 1.5 を使用してイメージをスケーリングします。

J = imlincomb(1.5,I);

元のイメージと処理後のイメージを表示します。

imshow(I)

figure
imshow(J)

イメージをワークスペースに読み取ります。

I = imread('cameraman.tif');

イメージをローパス フィルター処理したコピーを作成します。

J = uint8(filter2(fspecial('gaussian'), I));

IJ の線形結合を使用し、差分イメージを求めて 0 の値を 128 にシフトします。

K = imlincomb(1,I,-1,J,128); %K(r,c) = I(r,c) - J(r,c) + 128

結果の差分イメージを表示します。

imshow(K)

2 つの uint8 グレースケール イメージをワークスペースに読み取ります。

I = imread('rice.png');
J = imread('cameraman.tif');

線形結合を使用してイメージを加算します。結果の切り捨てが生じないように、出力を uint16 型で指定します。

K = imlincomb(1,I,1,J,'uint16');

結果を表示します。

imshow(K,[])

2 つの uint8 グレースケール イメージをワークスペースに読み取って GPUarray に変換します。

I = gpuArray(imread('rice.png'));
J = gpuArray(imread('cameraman.tif'));

GPU で線形結合を使用してイメージを加算します。結果の切り捨てが生じないように、出力を uint16 型で指定します。

K = imlincomb(1,I,1,J,'uint16');

結果を表示します。

figure
imshow(K,[])

この例では、イメージ上で一連の算術演算を実行するときに、呼び出しを入れ子にする場合と線形結合を使用する場合の違いを説明します。imlincomb が結果を切り捨てる前にすべての算術演算をどのように行うかを示すために、入れ子の算術関数を使用した場合と imlincomb を使用した場合で、2 つの配列 XY の平均を計算し、その結果を比較します。

2 つの配列を作成します。

X = uint8([ 255 0 75; 44 225 100]);
Y = uint8([ 50 50 50; 50 50 50 ]);

入れ子の算術関数を使用して配列の平均を計算します。Z(1,1) に返される平均を計算するために、関数 imadd では 255 と 50 を加算し、結果を 255 に切り捨て、imdivide に渡します。Z(1,1) に返される平均値は 128 です。

Z = imdivide(imadd(X,Y),2)
Z = 2×3 uint8 matrix

   128    25    63
    47   128    75

一方、imlincomb は倍精度で加算と除算を行い、最終結果のみを切り捨てます。Z2(1,1) に返される平均値は 153 です。

Z2 = imlincomb(.5,X,.5,Y)
Z2 = 2×3 uint8 matrix

   153    25    63
    47   138    75

拡張機能

R2006a より前に導入

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