圖像的代數運算是兩幅輸入圖像之間進行的點對點的加、減、乘、除運算后得到輸出圖像的過程。
一、圖像的加法運算
圖像相加一般用於對同一場景的多幅圖像求平均效果,以便有效地降低具有疊加性質的隨機噪聲。
代碼如下:
clear all; close all; I1 = imread('flower1.jpg'); I2 = imread('flower2.jpg'); I3 = imadd(I1, I2); %圖像的加法運算 subplot(2, 2, 1), imshow(I1), title('原始圖像1'); subplot(2, 2, 2), imshow(I2), title('原始圖像2'); subplot(2, 2, 3), imshow(I3), title('處理后的圖象');
處理后的圖像顯示如下:
兩幅圖像的像素值相加時,產生的結果很可能超過圖像數據類型所支持的最大值,尤其對於uint8類型的圖像,溢出的情況最為常見。當數據值發生溢出時,imadd函數將數據截取為數據類型所支持的最大值,這種截取效果稱之為飽和。為了避免出現飽和現象,在進行加法計算前,最好將圖像轉換為一種數據范圍較寬的數據類型。
二、圖像的減法運算
圖像減法也稱為差分方法,是一種常用於檢測圖像變化及運動物體的圖像處理方法。
代碼如下
clear all; close all; rice = imread('rice.jpg'); background = imerode(rice, strel('disk', 15)); %生成背景亮度圖像 rice2 = imsubtract(rice, background); subplot(1, 2, 1), imshow(rice), title('原始圖像'); subplot(1, 2, 2), imshow(rice2), title('處理后的圖像');
處理后的圖象顯示如下:
三、圖像的乘法運算
兩幅圖像進行乘法運算可以實現掩模操作,即屏蔽掉圖像的某些部分。一幅圖像乘以一個常數通常被稱為縮放,這是一種常見的圖象處理操作。縮放通常將產生比簡單添加像素偏移量自然得多的明暗效果,這是因為這種操作能夠更好的維持圖像的相關對比度。
代碼如下:
clear all; close all; moon = imread('moon.jpg'); moon2 = immultiply(moon, 2); subplot(1, 2, 1), imshow(moon), title('原始圖像'); subplot(1, 2, 2), imshow(moon2), title('處理后的圖像');
處理后的圖像顯示如下:
四、圖像的除法運算
除法運算可用於校正成像設備的非線性影響,這在特殊形態的圖象(如斷層掃描等醫學圖像)處理中常常用到。圖像除法也可以用來檢測兩幅圖像間的區別,但是除法操作給出的是相應像素值的變化比率,而不是每個像素的絕對差異,因而圖像除法也成為比率變換。
代碼如下:
clear all; close all; I = imread('rice.jpg'); I2 = double(I); J = double(I2 * 0.43 + 90); K = imdivide(I2, J); subplot(1, 2, 1), imshow(I), title('I'); subplot(1, 2, 2), imshow(K), title('K');
處理后的圖像顯示如下: