画像の代数演算と論理演算 - Matlab 実装

画像の代数演算と論理演算 - Matlab 実装

1. 加算演算

加算演算は、平均ノイズ低減などのさまざまな状況でよく使用されます。画像加算は通常、同じシーンの複数の画像を平均して加算ノイズを効果的に低減するために使用されます。画像がランダムなノイズ源によって干渉されている場合、複数の静止画像を平均化することでノイズを除去または低減できます。平均化プロセス中、画像の静的な部分は変化しません。画像のノイズはランダムであるため、さまざまなノイズ パターンが非常にゆっくりと蓄積されます。したがって、複数の画像を平均化することでランダム ノイズを低減できます。

M枚の画像を平均すると、Mが大きいほどノイズリダクション効果が高くなります。

画像にガウス ノイズを追加し、複数回の加算と平均によってノイズを除去します。MATLAB プログラムは次のとおりです。

%% 把一副图像加上高斯噪声,再通过多次相加求平均的方法去除噪声
% 验证相加次数和降噪效果是否成正比
clc;clear;close all;    % 初始化
I=imread('eight.tif');
J=imnoise(I,'gaussian',0,0.02); % 向这副图片加入高斯噪声
subplot(231);imshow(I);title('原图');
subplot(232);imshow(J);title('加噪声');
[M,N]=size(J);  K=zeros(M,N);   % 产生全零的矩阵,大小与图片的一样
a=100;
for i=1:a
    J=imnoise(I,'gaussian',0,0.02);
    J1=im2double(J);
    K=K+J1; % 相加
end
K=K/a;  % 求平均值
subplot(233);imshow(K);title([num2str(a),'次求平均后的图']);

実行結果は次のとおりです。
ここに画像の説明を挿入します

平均数値が大きいほどノイズ低減効果が高くなります。

コードに含まれる imnoise 関数の詳細な説明:

MATLAB の関数 imnoise は、ノイズを追加して画像を汚すことを意味し、ノイズ汚染画像関数と呼ばれます。

g = imnoise(I,type)
g = imnoise(I,type,parameters)
g = imnoise(I,‘gaussian’,m,v)
g = imnoise(I,‘localvar’,V)
g = imnoise(I,‘localvar’,image_intensity,var)
g = imnoise(I,‘poisson’)
g = imnoise(I,‘salt & pepper’,d)
g = imnoise(I,‘speckle’,v)

f は入力画像です。関数 imnoise は、ノイズを追加する前に、イメージを範囲 [0,1] の二重イメージに変換します。ノイズ パラメーターを指定するときは、これを考慮する必要があります。

g=imnoise(f,'gaussian',m,var) は、平均 m と分散 var のガウス ノイズをイメージ f に追加します。デフォルト値は、平均 m 0 と分散 var 0.01 のノイズです。

g=imnoise(f,'localvar',V) は、平均 0、局所分散 V のガウス ノイズをイメージ f に追加します。ここで、V は f と同じサイズの配列であり、それぞれの理想二乗が含まれます。点の違いです。

g=imnoise(f,'localvar',image_intensity,var) は、平均 0 のガウス ノイズをイメージ f に追加します。ここで、ノイズ var の局所分散はイメージ f の強度値の関数です。パラメータ image_intensity と var は同じサイズのベクトルで、plot(image_intensity,var) はノイズ分散と画像の明るさの間の関数関係をプロットします。ベクトル image_intensity には、範囲 [0,1] の正規化された強度値が含まれている必要があります。

g=imnoise(f,'salt&pepper',d) は、イメージ f をソルトアンドペッパー ノイズで汚染します。ここで、d はノイズ密度 (つまり、ノイズ値を含むイメージ領域のパーセンテージ) です。したがって、約 d*numel(f) ピクセルが影響を受けます。デフォルトのノイズ密度は 0.05 です。

g=imnoise(f,'speckle',var) は、方程式 g=f+n*f) を使用してイメージ f に乗法ノイズを追加します。ここで、n は平均 0、分散 var, var を持つ均一に分布したランダム ノイズです。デフォルト値は次のとおりです。 0.04。

g=imnoise(f,'poisson') は、データに人工ノイズを追加するのではなく、データからポアソン ノイズを生成します。ポアソン統計に準拠するには、unit8 およびunit16 クラス イメージの明るさがフォトンの数と一致する必要があります。ピクセルあたりのフォトンの数が 65535 より大きい場合、倍精度画像が使用されます。輝度値は 0 ~ 1 の間で変化し、フォトンの数を 10e12 で割った値に対応します。

2. 減算演算

画像減算は、変化する物体や移動する物体を検出するためによく使用され、画像差分演算とも呼ばれます差分法は、制御された環境での単純な差分法と、背景モデルに基づく差分法に分類できます。制御された環境または短期間では、背景は固定されていると見なすことができ、微分演算を直接使用して、変化する物体または移動する物体を検出できます。

異なる時間に撮影された同じシーンの画像、または異なる波長帯での同じシーンの画像を差し引くことは減算法であり、実際には画像の減算演算です。差分画像は画像間の差分情報を提供し、動的監視、移動ターゲットの検出と追跡、画像の背景除去とターゲット認識などのガイドに使用できます。

画像に対して減算演算を実行する場合、減算された 2 つの画像の対応する点が空間内の同じターゲット上に配置されている必要があります。そうでない場合は、幾何学的なキャリブレーションとマッチングを最初に実行する必要があります。他の変化を検出するために一連のシーンの画像が差し引かれる場合、正確な位置合わせを保証するのは困難であり、さらなる分析が必要です。

画像には塩胡椒ノイズが干渉することが知られており、そのノイズは減算演算によって抽出されます。MATLAB コードは次のとおりです。

%% 已知一副收到椒盐噪声干扰的图片,通过减法运算提取出噪声
clc;clear;close all;    % 初始化
I=imread('C:\Users\xcz\Desktop\matlab_example\Images\lena.jpg');
I1=imnoise(I,'salt & pepper',0.02);
K=imsubtract(I1,I); % 实现两幅图片相减,也可使用imabsdiff函数,从而避免负值为0
K1=255-K;   % 图像求反显示
subplot(131);imshow(I);title('原图');
subplot(132);imshow(I1);title('加椒盐噪声后');
subplot(133);imshow(K1);title('提取的噪声');

実行結果は次のとおりです。
ここに画像の説明を挿入します

Matlab コードに関係する関数 imsubtract の詳細な説明:

英語の原文は以下の通り
ここに画像の説明を挿入します

知らせ: imsubtract 関数は減算後の負の値のデータを 0 に切り取るのに対し、imabsdiff 関数は 2 つの画像の差の絶対値を求め、負の値を 0 に切り取ることはありません。負の値を指定し、ピクセル値の計算結果間の差が小さすぎることを避けるため (減算後の結果が負の場合は 0 になります)、関数 imabsdiff を呼び出すことをお勧めします。

3. 乗算演算

単純な乗算演算を使用して、イメージのグレー レベルを変更し、グレー レベル変換を実現できます。また、乗算演算を使用して、イメージの特定の部分をカバーすることもできます。その一般的な用途は、マスク イメージを取得することです。保存する必要がある領域のマスク イメージの値は 1 に設定され、抑制する必要がある領域のマスク イメージの値は 0 に設定されます。乗算は、畳み込みまたは相関処理を実装する手法として使用されることがあります。

Matlab コードは次のように実装されます。

%% 实现图像的乘法运算
clc;clear;close all;    % 初始化
I=imread('moon.tif');
J=immultiply(I,1.2);    % 将此图片乘以1.2
K=immultiply(I,2);      % 将此图片乘以2
subplot(131);imshow(I);title('原图');
subplot(132);imshow(J);title('乘以1.2');
subplot(133);imshow(K);title('乘以2');

実行結果は次のとおりです。
ここに画像の説明を挿入します

コード内の immultiply 関数は画像の乗算演算に使用されています (詳細についてはヘルプドキュメントを参照してください)。

4. 分割演算

単純な除算演算を使用して、画像のグレースケールを変更できます。除算演算の典型的な用途は、比率画像処理です。たとえば、除算演算はイメージング機器の非線形効果を補正するために使用でき、特殊な形式の画像 (CT に代表される医療画像など) の処理に使用されます。さらに、除算演算は、画像デジタル化デバイスの空間効果を除去するために使用されます。

Matlab コードは次のように実装されます。

%% 实现图像的除法运算
clc;clear;close all;    % 初始化
moon=imread('moon.tif');I=double(moon); % 读入图像,并将其数据类型转为double
J=I*0.43+90;K=I*0.1+90;L=I*0.01+90;
moon2=uint8(J);moon3=uint8(K);moon4=uint8(L);
J=imdivide(moon,moon2);K=imdivide(moon,moon3);
L=imdivide(moon,moon4);
subplot(221);imshow(moon);title('原图');
subplot(222);imshow(J,[]);title('J=I*0.43+90');
subplot(223);imshow(K,[]);title('K=I*0.1+90');
subplot(224);imshow(L,[]);title('L=I*0.01+90');

実行結果は次のとおりです。
ここに画像の説明を挿入します

5. 論理演算

一般的な画像論理演算には、and、or、not などが含まれます。これらは主にバイナリ画像を対象としており、画像の理解と分析の分野で役立ちます。この方法を使用すると、画像のテンプレートを提供でき、他の計算方法と組み合わせて特殊効果を実現できます。

2 つのバイナリ イメージは論理的に AND、OR、NOT です。MATLAB コードは次のとおりです。

%% 两幅二值图像进行逻辑与、或、非
clc;clear;close all; %初始化
A=zeros(128);A(40:67,60:100)=1; % 创建两个矩阵
B=zeros(128);B(50:80,40:70)=1;
C=and(A,B);D=or(A,B);E=not(A); %对A图和B图进行逻辑运算
subplot(231);imshow(A);title('A图');
subplot(232);imshow(B);title('B图');
subplot(233);imshow(C);title('C图,A,B相与');
subplot(234);imshow(D);title('D图,A,B相或');
subplot(235);imshow(E);title('E图,A取反');

実行結果は次のとおりです。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/xcz8023/article/details/126217393