2015-01-02 44 views
0

我嘗試從我的工作區讀取文件,並使用灰度級的直方圖計算每個圖像帶的順序之一的熵。這是我的嘗試,我可以讀取.mat與負載功能文件熵和直方圖

clc 
I = load('file.mat'); 
E = entropy(I); 
hist(E); 
figure 
plot(E); 

更新: 這是代碼:

I = load('file.mat'); 
E = zeros(1,size(I,3)); 

for idx = 1 : size(I,3) 
    %// Calculate PDF 
    chan = I(:,:,idx); 
    h = imhist(chan); 

end 

現在,我得到這個錯誤: enter image description here

再次

感謝自定義任何幫助

+0

'I'究竟是什麼?這是一個彩色圖像嗎?從代碼中不太清楚。順便說一句,'熵'**已經**計算整個圖像的熵。它內部計算強度的直方圖/ PDF並計算熵。另外,看看這篇文章的見解:http://stackoverflow.com/questions/27726735/how-to-calculate-the-shannon-entropy-of-a-part-of-image-data/27726789#27726789 - 但是,這篇文章只是計算一部分圖像的熵。只需更改代碼,以便在整個圖像上使用它。 – rayryeng

+0

我是。mat文件,我應該使用直方圖來計算熵 – Lina

+0

我不知道如何從mat文件中提取信息計算熵,而不是在直方圖中顯示結果 – Lina

回答

3

回想一下,熵(香)定義爲:

在這種情況下,b = 2。你需要做的是假設我們有一個灰度圖像,我們需要找到圖像的概率分佈函數,然後使用上面的定義來計算我們的熵。 MATLAB中的entropy命令已經爲我們做到了這一點,但是從您的意見中,您想要從最初的原則來做到這一點。只需按照上面列出的步驟操作即可。因此,對於灰度圖像,我們首先需要通過imhist獲取圖像的直方圖,然後通過圖像中的像素總數將其歸一化,以獲得概率分佈函數。

因此,如果您的圖像加載到im是灰度,你這是怎麼計算熵:

%// Grab image data 
im = I.indian_pines_corrected; 

%// Calculate PDF 
h = imhist(I); 
h = h/numel(I); 

%// Set any entries in the PDF that are 0 to 1 so log calculation works 
h(h == 0) = 1; 

%// Calculate entropy 
E = -sum(h.*log2(h)); 

上面的代碼經過我們提出的邏輯。但是,請查看第三行代碼。概率分佈函數中的任何條目都是0,因此計算結果會生成一個無效數字,因此爲使log函數安全地將其設置爲0,我們將PDF中的任何值設置爲0到1,以便log(1) = 0。本質上,熵計算將忽略這些條目,以便我們可以正確計算該值。

因爲你有一個顏色圖像,所有你需要做的就是把每個顏色通道作爲一個單獨的灰度圖像,所以我們可以使用上面的代碼並遍歷每個通道。只需將每個顏色通道提取爲灰度圖像,然後計算每個顏色通道的熵。因此,假設I是彩色圖像:

%// Grab image data 
im = I.indian_pines_corrected; 

E = zeros(1,size(I,3)); 

for idx = 1 : size(I,3) 
    %// Calculate PDF 
    chan = I(:,:,idx); 
    h = imhist(chan); 
    h = h/numel(chan); 

    %// Find any entries in the PDF that are 0 to 1 so log calculation works 
    h(h == 0) = 1; 

    %// Calculate entropy 
    E(idx) = -sum(h.*log2(h)); 
end 

E將是一個陣列,其中每個元件會告訴你爲每個顏色通道的熵。因此,第一個元素將是第一個通道的熵(紅色),第二個元素將是第二個(綠色),依此類推。

+0

感謝rayryeng的幫助,但現在我面臨一個新問題,我已更新帖子 – Lina

+1

@Lina - 請不要編輯我的帖子。你的改變會破壞我的代碼,它不會奏效。將來,如果您想要建議更改帖子,請留下評論並驗證您的建議更改是否有效,並提供與提議修改之前相同的信息。 – rayryeng