matlab 影象灰度值變換至指定範圍,求轉換方程
阿新 • • 發佈:2019-02-06
宣告:筆者關於matlab主題的帖子內容均來自於課堂作業,課堂筆記以及自己在學習過程中查詢matlab官方文件獲得的學習經驗,分享到CSDN一方面是作為自己的學習筆記,另一方面希望可以幫助到和我一樣的初學者。題目來自於筆者在美帝學習CS的作業,程式碼屬於筆者原創,轉載請註明出處,禁止抄襲。哈哈說的有點嚴重是因為內容來自美帝課堂,為了博主不被遣返,希望各位看官理解。
題目:
自定義一個Scaling函式區實現如下功能:將原圖的灰度值範圍規範到使用者指定的範圍,並繪製轉換方程的影象。
函式原型為:function [scaledIm, transFunc] = Scaling(inputIm, range)
其中:inputIm為輸入的影象,range為指定的灰度值新範圍。scaledIm為處理後的影象,transFunc為一個包含n個元素的行或列向量,n為原影象的灰度值的最大值-最小值+1(即原圖灰度值範圍),該向量的第一個元素應該是新影象灰度值的最小值,最後一個元素為新影象的灰度值的最大值。
要求:1.輸入和輸出的影象都是uint8型別。2. 對使用者輸入的範圍作有效性驗證,如果不符合(0,255)要給出錯誤提示。
舉例說明:
為了方便理解這個題目要做的事情是什麼,博主這裡貼出自己舉的例子。
程式碼實現:
function [scaledIm, transFunc] = Scaling(inputIm, range )
scaledIm = inputIm;
[row, col] = size(inputIm); % get the size
% get the input range
rangeLow = double(range(1));
rangeHigh = double(range(2));
% Determine if the input range is valid
% If not valid, return
if rangeLow<0 || rangeHigh>255 || rangeLow>255 || rangeHigh<0 || rangeLow>rangeHigh
disp('Out of range! Range is between 0 and 255');
return;
end
% get the max, min and range of inputIm
maxIm = double(max(max(inputIm)));
minIm = double(min(min(inputIm)));
% n is the original range of max and min, used to cpmpute the transform function
n = maxIm - minIm + 1;
% calcaulate the slope and constant of transformation function
% y = kx + b
k = ( rangeHigh - rangeLow )/( maxIm - minIm );
b = rangeHigh - maxIm * k;
% Transform inputIm to scaledIm
for i = 1 : row
for j = 1 : col
scaledIm(i,j) = uint8( k * double(inputIm(i,j)) + b);
end
end
% Display vector transfunc
transFunc = zeros(1,n);
for i = 1 : n
transFunc(i) = (minIm + i - 1) * k + b ;
end
主函式為:
[scaledFood,transFunc] = Scaling(food,[0 255]);
figure(1);
subplot(1,2,1);imshow(scaledFood);title('Scaled food');
subplot(1,2,2);plot(transFunc);
xlabel('orignal value');
ylabel('transfered value');
執行結果:
這裡是規範化之前的原圖,可以看到明顯的區別。