图像的 MATLAB 高斯分布之和大于 1

Sum of MATLAB Gaussian distribution of an image is greater than 1

我正在使用下面的代码来计算下面给出的图像的像素强度概率。但是,概率总和 sum(sum(probOfPixelIntensities)) 大于 1。

我不确定哪里出错了。任何有助于解决这个问题的帮助将不胜感激。提前致谢。

clear all
clc
close all
I = imread('Images/cameraman.jpg');
I = rgb2gray(I);
imshow(I)
muHist = 134;
sigmaHist = 54;
Iprob = normpdf(double(I), muHist, sigmaHist);
sum(sum(Iprob))

请记住,PDF 只是概率密度函数 $p(x)$。限制在 $[0, 1]$ 范围内的函数是该函数 $\int_D p(x)dx$.

的所有域的积分

参考Matlab manual,Y = normpdf(X,mu,sigma) 使用均值 mu 和标准差 sigma 的正态分布计算 X 中每个值的 pdf。

pdf的总和等于1。 输出的总和不是。

您正在做的是计算图像中每个像素的 PDF 值。 Iprob 不是 正态分布,但您只是使用图像像素从已知均值和标准差的分布中采样。

本质上,您只是在执行数据转换,其中图像像素强度被映射到具有已知均值和标准差的普通 PDF 上的值。这与 PDF 相同,这就是总和不是 1 的原因。除此之外,图像像素强度本身甚至不遵循正态分布,因此不会分布总和为 1 的任何方式。

除了 normpdf 的输出不是您所期望的那样,没什么可说的了。您应该选择更仔细地阅读 normpdf 的文档:http://www.mathworks.com/help/stats/normpdf.html


如果您想确定图像的实际PDF,您需要做的是找到图像的直方图,而不是进行数据转换。你可以用 imhist 来做到这一点。执行此操作后,假设遇到强度是等概率的,您将 除以 每个直方图条目除以图像的总大小,然后对所有 bin 求和。在这种情况下,您应该将总和设为 1。

为了验证,让我们使用您在 post 中提供的图像。我们将从 Whosebug 中读取它。一旦我们这样做了,计算 PDF,然后对所有 bin 求和:

%// Load in image
im = rgb2gray(imread('http://i.stack.imgur.com/0XiU5.jpg'));

%// Compute PDF
h = imhist(im) / numel(im);

%// Sum over all bins
fprintf('Total sum over all bins is: %f\n', sum(h));

我们得到:

Total sum over all bins is: 1.000000

为了确保您完全理解,这是 图像 的 PDF 文件。您之前所做的是执行数据转换,转换符合高斯分布且均值和标准差已知的所有图像像素强度。这将不会如你所料地给你总和 1。