1. 程式人生 > >matlab 影象灰度值變換至指定範圍,求轉換方程

matlab 影象灰度值變換至指定範圍,求轉換方程

宣告:筆者關於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');

執行結果:

這裡寫圖片描述

這裡是規範化之前的原圖,可以看到明顯的區別。

這裡寫圖片描述