Matlab学習4 - 画像処理 画像加算、画像減算、ノイズ加算

画像処理、画像加算(画像の重ね合わせ、色を明るくするなど)、画像減算(動画の軌跡を捉えるなど)
環境 matlab2020

imadd (加算)、imsubtract (減算)、imresize (変更)、imnoise (画像ノイズ加算) を使用します。

マットラボ関数

imadd(X, Y):
2 つの画像を追加するか、画像に定数を追加します。Z
=imadd(X, Y) は、配列 X の各要素を配列 Y の対応する要素に追加し、配列を出力します。 Z の対応する要素。
imsubtract(X,Y) は、
あるイメージを別のイメージから減算するか、イメージから定数を減算します。
Z = imsubtract(X,Y) は、配列 X の各要素から配列 Y の対応する要素を減算し、次の対応する要素の差を返します。出力配列 Z。
rgb2gray() は
、RGB イメージまたはカラー マップをグレースケール イメージに変換します。I
=rgb2gray(RGB) は、トゥルー カラー イメージ RGB をグレースケール イメージ I に変換します。輝度を維持しながら色相と彩度の情報を削除することで、RGB イメージをグレースケールに変換します。
imnoise(): イメージにノイズを追加します。
J = imnoise(I, 'gaussian') は、分散 0.01 のゼロ平均白色ガウス ノイズをグレースケール イメージ I に追加します。
J = immoise(I, 'gaussian', m) は、平均 m、分散 0.01 のガウス ホワイト ノイズを追加します。
J = imnoise(I, 'gaussian', m, var_gauss) は、平均 m と分散 var_gauss をもつガウス ホワイト ノイズを追加します。
J = imnoise(I, 'localvar', var_local) は、局所分散 var_local を持つゼロ平均白色ガウス ノイズを追加します。
J = imnoise(I, 'localvar', Intensity_map, var_local) は、ゼロ平均ホワイト ガウス ノイズを追加します。ノイズの局所分散 var_1ocal は、I の画像強度値の関数です。画像強度値のノイズ分散へのマッピングは、ベクトルintensity_mapによって指定されます。
J = imnoise(I, 'poisson') は、データに人工ノイズを追加するのではなく、データからポアソン ノイズを生成します。詳細については、「アルゴリズム」を参照してください。
J = imnoise(I, 'salt&pepper') は塩と胡椒のノイズを追加します。デフォルトのノイズ密度は 0.05 です。これはピクセルの約 5% に影響します。3 = imnoise(I, 'salt&pepper', d) は塩と胡椒のノイズを追加します。ここで
dはノイズ密度です。これは約 d numel(I) ピクセルに影響します。=imnoise(I,'speckle') は、方程式 ]=I+nT を使用して乗法ノイズを追加します。ここで、 n は平均 0 、分散 0.05 の均一に分布したランダム ノイズです。 J
= imnoise(I, 'speckle', var_speckle) は、分散 var_speckle を持つ乗算ノイズを追加します。

1. 画像追加

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像加法
img1=imread("A.bmp");
img2=imread("B.bmp");
%rbg图像转变灰度图像
img3=rgb2gray(img1);
img4=rgb2gray(img2);
%灰度图像相加
img5=imadd(img3,img4);
%显示
subplot(1,3,1),imshow(img3),xlabel("A");
subplot(1,3,2),imshow(img4),xlabel("B");
subplot(1,3,3),imshow(img5),xlabel("A+B");

2. 画像の融合

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像融合
img1=imread("man.tif");
img2=imread("test1.png");
%修改图像大小
% img1=imresize(img1,[200,200]);
% img2=imresize(img2,[200,200]);

%图像相加,x,y必须具有相同大小和类
img3=imadd(img1,img2);

subplot(1,3,1),imshow(img1),xlabel("A");
subplot(1,3,2),imshow(img2),xlabel("B");
subplot(1,3,3),imshow(img3),xlabel("A+B");

3. 特定のパラメータを使用した画像の融合

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像融合,使用具体参数
img1=imread("test1.png");

%图像相加
img2=imadd(img1,50);
img3=imadd(img1,-50);

subplot(1,3,1),imshow(img1),xlabel("原图像");
subplot(1,3,2),imshow(img2),xlabel("增加亮度后的图像");
subplot(1,3,3),imshow(img3),xlabel("减弱亮度后的图像");

4. 画像復元

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像还原
%原始图像
img=imread("test.png");
img=rgb2gray(img);
subplot(2,3,1),imshow(img),xlabel("(a)原图像");
[m,n]=size(img);

%加噪图像(被还原图像)
img1=imnoise(img,"gaussian",0,0.01);%叠加零均值高斯噪声(方差为0.01subplot(2,3,2),imshow(img1),xlabel("(b)加噪图像");

%2幅同类图像进行相加平均
J=zeros(m,n);
J=double(J);
for i=1:2
    X=imnoise(img,"gaussian");
    Y=double(X);
    J=J+Y/2;
end
subplot(2,3,3),imshow(mat2gray(J)),xlabel("(c)2幅图像平均");
%4幅同类图像进行相加平均
J=zeros(m,n);
J=double(J);
for i=1:4
    X=imnoise(img,"gaussian");
    Y=double(X);
    J=J+Y/4;
end
subplot(2,3,4),imshow(mat2gray(J)),xlabel("(d)4幅图像平均");
%8幅同类图像进行相加平均
J=zeros(m,n);
J=double(J);
for i=1:8
    X=imnoise(img,"gaussian");
    Y=double(X);
    J=J+Y/8;
end
subplot(2,3,5),imshow(mat2gray(J)),xlabel("(e)8幅图像平均");
%16幅同类图像进行相加平均
J=zeros(m,n);
J=double(J);
for i=1:16
    X=imnoise(img,"gaussian");
    Y=double(X);
    J=J+Y/16;
end
subplot(2,3,6),imshow(mat2gray(J)),xlabel("(f)16幅图像平均");

5. 画像減算

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像减法
img1=imread("A.bmp");
img2=imread("B.bmp");
%修改图像大小
% img1=imresize(img1,[200,200]);
% img2=imresize(img2,[200,200]);

%图像相减,要求图像矩阵相同大小
img3=imsubtract(img1,img2);
subplot(1,3,1),imshow(img1),xlabel("A");
subplot(1,3,2),imshow(img2),xlabel("B");
subplot(1,3,3),imshow(img3),xlabel("A-B");

6. 画像減算、キャプチャ画像の動きの軌跡

効果は次のとおりです。
ここに画像の説明を挿入

test.m コード:

%图像减法,运动图像轨迹
img1=imread("F4_8a.bmp");
img2=imread("F4_8b.bmp");
img3=imread("F4_8c.bmp");
subplot(2,3,1),imshow(img1),xlabel("a");
subplot(2,3,2),imshow(img2),xlabel("b");
subplot(2,3,3),imshow(img3),xlabel("c");

%图像相减
img4=imsubtract(img1,img2);
img5=imsubtract(img2,img3);
img6=imsubtract(img1,img3);


subplot(2,3,4),imshow(img4),xlabel("a-b");
subplot(2,3,5),imshow(img5),xlabel("b-c");
subplot(2,3,6),imshow(img6),xlabel("a-c");

素材:https://gitee.com/CYFreud/matlab/tree/master/image_processing/demo4_220328

おすすめ

転載: blog.csdn.net/CHengYuP/article/details/123816014