2015-01-02 476 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