@
目錄
圖像的代數運算在圖像處理中有着廣泛的應用,它除了可以實現自身所需的算數操作,還能為許多復雜的圖像處理提供准備。例如,圖像減法就可以用來檢測同一場景或物體生成的兩幅或多副圖像的誤差。可以使用MATLAB基本算數符(﹢、﹣、·、/)來執行圖像的算數操作,但在此之前必須將圖像轉換為適合進行基本操作的雙精度類型。在MATLAB中,圖像運算函數無需再進行數據類型之間的轉換,這些函數能夠接受uint8和uint16的數據,並且返回相同格式的圖像結果。
下表是一個常見的MATLAB圖像運算函數集合。
函數名 | 功能描述 |
Imabsdiff | 用於計算兩幅圖像的絕對差值 |
imcomplement | 用於補足一幅圖像 |
imlincomb | 用於計算兩幅圖像的線性組合 |
clear
close all
clc
bw=imread('circbw.tif');
bw2=imcomplement(bw);
subplot(231)
imshow(bw)
title('二值原始圖像')
subplot(234)
imshow(bw2)
title('二值圖像求補')
I=imread('cell.tif');
J=imcomplement(I);
subplot(232)
imshow(I)
title('原始圖像灰度圖像')
subplot(235)
imshow(J)
title('灰度圖像求補')
RGB=imread('onion.png');
RGB1=imcomplement(RGB);
subplot(233)
imshow(RGB)
title('RGB原始圖像')
subplot(236)
imshow(RGB1)
title('RGB圖像求補')
2.利用imlincomb函數將圖像的灰度值放大1.5倍
clear
clc
close all
I=imread('pout.tif');
J=imlincomb(1.5,I);
subplot(121);
imshow(I)
title('原始圖像')
subplot(122)
imshow(J)
title('放大1.5倍后的圖像')
3.利用imlincomb函數計算兩幅圖像的平均值。
clear
clc
close all
A1=imread('rice.png');
A2=imread('cameraman.tif');
K=imlincomb(0.3,A1,0.3,A2);
subplot(131)
subimage(A1)
title('原始圖像rice')
subplot(132)
subimage(A2)
title('原始圖像cameraman')
subplot(133)
subimage(K)
title('圖像平均')
4.圖像的加法運算
圖像相加一般用於對同一場景的多重影像疊加求平均的圖像,以便有效地降低加性隨機噪聲。在MATLAB中,imadd函數用於實現圖像的相加,該函數的調用格式如下:
Z=imadd(X,Y):將矩陣X中的每一個元素與矩陣Y中對應的元素相加,返回值為Z
clear
clc
close all
I=imread('rice.png');
J=imread('cameraman.tif');
K=imadd(I,J,'uint16');%圖像相加,並把結果存為16位的形式
subplot(131)
imshow(I)
title('rice原始圖像')
subplot(132)
imshow(J)
title('cameraman原始圖像')
subplot(133)
imshow(K,[]);%注意把結果壓縮到0~255范圍內顯示
title('相加圖像')
5.利用imnoise函數對噪聲進行相加運算
clear
close all
clc
a=imread('pout.tif');
a1=imnoise(a,'gaussian',0,0.007);
a2=imnoise(a,'gaussian',0,0.007);
a3=imnoise(a,'gaussian',0,0.007);
a4=imnoise(a,'gaussian',0,0.007);
K=imlincomb(0.25,a1,0.25,a2,0.25,a3,0.25,a4);
subplot(131)
imshow(a)
subplot(132)
imshow(a1)
subplot(133)
imshow(K)
6.圖像的減法運算
圖像的減法運算也稱為差分運算,經常用於檢測變化及運動的物體。在Matlab中可以用圖像數組直接相減來實現,也可以調用imsubtract函數來實現。該函數的調用格式如下:
Z=imsubtract(X,Y):將矩陣X中的每一個元素與矩陣Y中對應的元素相減,返回值為Z
clear
close all
clc
i=imread('eight.tif');
subplot(221)
imshow(i)
back=imopen(i,strel('disk',15));
subplot(222)
imshow(back)
i1=imsubtract(i,back);
subplot(223)
imshow(i1)
i2=imsubtract(i,45);
subplot(224)
imshow(i2)
7.利用兩種函數去圖像的相減值和絕對值
clear
close all
clc
coins=imread('coins.png');
background=imopen(coins,strel('disk',15));
coins1=imsubtract(coins,background);
subplot(221)
imshow(coins)
title('原始圖像')
subplot(222)
imshow(background)
title('背景圖像')
subplot(223)
imshow(coins1)
title('imsubtract函數相減結果')
K=imabsdiff(coins,background);
subplot(224)
imshow(K,[])
title('imabsdiff函數相減結果')
8.降低R圖像的亮度
clear
close all
clc
R=imread('peppers.png');
R2=imsubtract(R,100);
subplot(121)
imshow(R)
title('原始圖像')
subplot(122)
imshow(R2)
title('降低后的圖像')
9.圖像的乘法運算
圖像的乘法運算主要用於實現圖像的掩膜處理,即屏蔽掉圖像的某些部分。圖像的縮放就是指一幅圖像乘以一個常數。若縮放因素大於1,則圖像的亮度將增強;若因素小於1,則會使圖像變暗。在MATLAB中,immultiply函數用於實現兩幅圖像的相乘。該函數的調用格式如下:
Z=immultiply(X,Y):將矩陣X中的每一個元素與矩陣Y中的元素對應相乘,返回值為Z
clear
close all
clc
I=imread('rice.png');
I1=uint16(I);
I2=immultiply(I1,I1);%圖像自乘
I3=immultiply(I,1.5);%圖像擴大像素
I4=immultiply(I,0.5);%圖像縮小像素
subplot(221)
imshow(I)
title('原始圖像')
subplot(222)
imshow(I2)
title('圖像自乘')
subplot(223)
imshow(I3)
title('圖像擴大像素')
subplot(224)
imshow(I4)
title('圖像縮小像素')
10.圖像的除法運算
圖像的除法運算用於校正由於照明不良或者傳感器的非線性影響造成的偏差,此外圖像的除法運算還被用於產生比率圖像,在MATLAB中調用imdivide函數進行兩幅圖像的相除。調用格式如下:
Z=imdivide(X,Y):將矩陣X中的每一個元素除以矩陣Y中對應的元素,返回值為Z
clear
close all
clc
I=imread('coins.png');
subplot(221)
imshow(I)
title('原始圖像')
background=imopen(I,strel('disk',15));
Ip=imdivide(I,background);
subplot(222)
imshow(Ip,[])
title('圖像與背景相除')
J=imdivide(I,3);
subplot(223)
imshow(J)
title('圖像與3相除的效果')
K=imdivide(I,0.6);
subplot(224)
imshow(K)
title('圖像與0.6相除的效果')