-4

我有一系列亮度下降的圖像,我想嘗試用直方圖均衡進行校正。我申請histeq一些測試數據,以瞭解功能的工作直方圖均衡產生意想不到的效果

% Image that I would like to apply histogram equalization to 
C = gallery('wilk',21); 
figure, imagesc(C) 

E = histeq(C); 
figure, imagesc(E); 

然而,當我看的histeq輸出,我得到的只有兩個唯一值的結果:0.8731.000。輸出如何不能涵蓋整個輸入範圍?我希望在輸出中有兩個以上的唯一值。

enter image description here

+1

爲什麼你不只是做'imhist'?它接受圖像並在圖中輸出直方圖。此外,在你的直方圖均衡之後,'unique(C)'返回什麼? – rayryeng

+0

請顯示您的直方圖均衡代碼。同時,你是否嘗試過「histeq」? – rayryeng

+0

啊。我只注意到現在輸入的內容。它不起作用,因爲你指定的輸入是直方圖均衡的廢話。動態範圍和強度分佈非常小,一旦「標準化」就會炸掉範圍。建議您在使用之前瞭解直方圖均衡的工作原理。在進一步處理之前,請在實際圖像上嘗試此操作。例如,使用圖像處理工具箱圖像:'C = imread('pout.tif');'。 – rayryeng

回答

2

根據用於histeq的文檔,如果輸入是double類型或single的預期是在範圍:[0, 1]。類UINT16的圖像[0,1]類雙圖像,[0,255]用於類UINT8的圖像,和[0,65535]:在適當範圍內

的強度值。

你的數據不被標準化,是double型,

whos C 

% Name  Size   Bytes Class  Attributes 
% 
% C   21x21    3528 double  

[min(C(:)), max(C(:))] 
% 0 10 

您需要先歸它。您可以使用mat2gray做到這一點:

E = histeq(mat2gray(C)); 

enter image description here

+1

您可能正在用'imshow'進行繪圖。 'imshow'使數字成爲實際尺寸(以像素爲單位),所以它們會很小,因爲它們是21 x 21.此外,它默認爲「灰色」顏色映射。使用'imagesc'。 – Suever

+3

@Masi你剛寫的東西對我來說沒有多大意義。由於我們無法看到數據,因此很難說數據的適當處理方式。也許問一個新的問題,就是圖像處理具體顯示你試圖做什麼來糾正你的數據?還包括數據本身並顯示預期輸出。這個問題只是關於你錯誤地使用'histeq' – Suever

+0

你怎麼能決定在'histeq(Matrix)'中應用哪個'hgram'來應用特定的矩陣?等如果'大小(矩陣)'是'1 2093809'。我不喜歡在這裏得到平坦的直方圖。 - - 生成n = size(pTFD,2); hgram = ones(1,n)* prod(size(pTFD))/ n;'是資源量大的。 –