標度差值圖像

標度差值圖像主要應用在兩張圖像相減的時候,在實踐中,大多數圖像都是有8碼顯示,因此像素值在0到255之間,因此在差值圖像中,像素值的取值爲-255到255之間,因此在顯示這一結果時需要對圖像作標度。

 

方法一:

對每一個像素值再加上255,然後除以2。該方法無法保證像素的取值可以覆蓋0到255的全部8比特範圍,但是所有的像素一定在這一範圍。另外,在除以2過程中固有的截尾誤差通常將導致精確度的損失。雖然有很多的不足,但是該非常的簡單方便。

 

方法二:

該方法彌補的方法一的缺點,它可以得到更高的精確度並使像素取值覆蓋整個8比特的範圍。我們首先提取最小值,並把它的負值加到所有的差值圖像的像素中(如果最小值是-a(a>0),則加上a;如果最小值是a,則減去a;通過該操作後,差值圖像中最小的值就爲0了)。之後,每一個像素乘以255/Max,其中Max爲上一步操作之後圖像的中最大像素值,這樣就將所有的像素標定到0到255的範圍內。


function result = scaleImg2(source)
% scale the image(let the value between 0 and 255)
% source - the image should be scaled with double data type
%
    minVal = min(source(:));
    source = source - minVal;
    maxVal = max(source(:));
    result = uint8(source*255/maxVal);
end

下圖是分別用兩種方法標定後的結果,我首先是分別用方差爲1 和方差10的高斯算子對圖像進行濾波,然後相減得到DoG圖像,由於存在負值,所以需要進行標定處理。從下圖中我們可以發現,方法二的效果要比方法一好,輪空更加的明顯,因爲它覆蓋了整個0到255的範圍。



源代碼下載地址


注意事項:

在matlab中,把圖像讀到內存是保存在uint8數據類型中,所以能夠保存的值是0到255之間。如果兩圖像相減之後得到負值,就會把截取,保存的值爲0,最後會得到錯誤的差值圖像。爲了避免這樣的錯誤,需要在相減之前轉換成double類型,然後標定之後再轉換成uint8進行顯示。

  

參考:

岡薩雷斯《數字圖像處理》第二版  



發佈了24 篇原創文章 · 獲贊 29 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章