——前言——
異常運算分爲兩種:計算結果溢出和計算結果類型無效。
①計算結果溢出:
不少圖像,eg:灰度圖、索引色圖、二值圖像或有限位真彩色圖像,其像素都是都範圍限制的。咱們在執行多幅圖的加減乘除運算時,計算結果極可能會超過有限值範圍。例如,兩幅256色灰度圖在作減法運算時,結果可能爲負數;執行加法運算時,像素超過255。這些都屬於計算結果溢出。
②計算結果類型無效:
圖像數據有不少類型,當咱們用uint8,uint16這樣像素要求是整數的圖像進行除法運算時,結果多是分數。這是由於圖像代數操做函數執行運算時,每每將數據看爲double類型。
函數
異常計算結果的修正遵循兩個原則:
①超過整數類型有效範圍的結果直接截斷到限定範圍的端點處。
【用uint8做爲條件舉例】
eg:理論結果是 -12,修正後是0;理論結果是687,修正結果是255.
②對分數計算進行四捨五入。
ui
如今經過示例來演示某圖經過加減獲得的新圖像的運算結果。
例:利用矩陣加法運算增長或減小圖像中某種顏色的成分。
clear all;
code
a=imread(‘C:\圖片\qiqi.png’);
s=size(a);
b=double(a);
c(:,:,1)=b(:,:,1)+b(:,:,2);
c(:,:,2)=b(:,:,2);
c(:,:,3)=b(:,:,3)-b(:,:,2);
for i=1:s(1)
for j=1:s(2)
for k=1:s(3)
if c(i,j,k)<0
c(i,j,k)=0;
end
if c(i,j,k)>255
c(i,j,k)=255;
end
end
end
end
blogc=uint8( c );
subplot(121);imshow(a);
subplot(122);imshow( c );
索引
結果:
tip:matlab A=(:,1) 和 T =(:,:,1)是什麼意思?
A(x,y)表示二維矩陣第x行第y列位置的元素,x爲:則表示全部的行。所以,A(:,1)就表示A的第1列的全部元素,這是一個列向量。
T =(:,:,1) :matlab T=(:,:,1)表明第一維、第二維的全部數據,第三維的第一個。
圖片