Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 熵与直方图_Matlab_Image Processing_Entropy - Fatal编程技术网

Matlab 熵与直方图

Matlab 熵与直方图,matlab,image-processing,entropy,Matlab,Image Processing,Entropy,我尝试从我的工作区读取一个文件,并使用灰度直方图计算每个图像带的一阶熵 这是我的尝试,我可以使用load函数读取.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(:

我尝试从我的工作区读取一个文件,并使用灰度直方图计算每个图像带的一阶熵 这是我的尝试,我可以使用load函数读取.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
现在,我得到了这个错误:


再次感谢您的帮助

回想一下熵(香农)的定义:

在这种情况下,
b=2
。你需要做的是假设我们有一个灰度图像,我们需要找到图像的概率分布函数,然后使用上面的定义来计算熵。MATLAB中的命令已经为我们完成了这项工作,但是从您的评论来看,您希望从第一原理开始。只需按照我上面概述的步骤操作即可。因此,对于灰度图像,我们首先需要通过获取图像的直方图,然后通过图像中的像素总数对其进行归一化,以获得概率分布函数

因此,如果您的图像被加载到
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
计算将生成一个无效数字,因此为了使
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
将是一个数组,其中每个元素将告诉您每个颜色通道的熵。因此,第一个元素将是第一个通道的熵(红色),第二个元素将是第二个通道的熵(绿色),依此类推。

回顾一下熵(香农)的定义:

在这种情况下,
b=2
。你需要做的是假设我们有一个灰度图像,我们需要找到图像的概率分布函数,然后使用上面的定义来计算熵。MATLAB中的命令已经为我们完成了这项工作,但是从您的评论来看,您希望从第一原理开始。只需按照我上面概述的步骤操作即可。因此,对于灰度图像,我们首先需要通过获取图像的直方图,然后通过图像中的像素总数对其进行归一化,以获得概率分布函数

因此,如果您的图像被加载到
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
计算将生成一个无效数字,因此为了使
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
将是一个数组,其中每个元素将告诉您每个颜色通道的熵。因此,第一个元素将是第一个通道的熵(红色),第二个元素将是第二个通道的熵(绿色),依此类推。

回顾一下熵(香农)的定义:

在这种情况下,
b=2
。你需要做的是假设我们有一个灰度图像,我们需要找到图像的概率分布函数,然后使用上面的定义来计算熵。MATLAB中的命令已经为我们完成了这项工作,但是从您的评论来看,您希望从第一原理开始。只需按照我上面概述的步骤操作即可。因此,对于灰度图像,我们首先需要通过获取图像的直方图,然后通过图像中的像素总数对其进行归一化,以获得概率分布函数

因此,如果您的图像被加载到
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
计算将生成一个无效数字,因此为了使
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
将是一个数组,其中每个元素将告诉您每个颜色通道的熵。因此,第一个元素是第一个通道的熵(红色),第二个元素是