matlab函式mapminmax不適用與於影象處理中的灰度級的擴充套件與壓縮
以下例子用於說明該問題:
在使用laplacian進行影象銳化時,我們會遇到資料型別的轉化,同時伴隨著產生了灰度級的擴充套件與壓縮的問題。(使用matlab程式設計)
I = imread('2.jpg'); I_g = rgb2gray(I); imtool(I_g,[]) % 使用laplacian進行影象銳化,該過程會產生負值,因此需要使用double型別 w = fspecial('laplacian',0); I_g_d = double(I_g); g = imfilter(I_g_d,w,'replicate'); I_g_g = I_g_d-g; % 在處理完之後,後續為了程式設計的方便,我們需要將資料恢復到0-255之間 I_g_g_g = mapminmax(I_g_g,0,255); imtool(I_g_g_g,[]);
原影象:
輸出的影象:
觀察輸出影象,發現水平方向出現一道一道的線,為什麼會產生這樣的現象,因為mapminmax意思是將矩陣的每一行處理成[-1,1]區間(參考:Matlab中的資料預處理-歸一化(mapminmax)與標準化(mapstd))。雖然該函式演算法也使用y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin,這個演算法可以實現灰度級的擴充套件與壓縮,只是該函式使用的是一行,而不是全域性的。
那麼在使用laplacian進行影象銳化時,灰度級的擴充套件與壓縮的問題怎麼處理呢?(參考:)