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

时间:2015-05-14 11:03:04

标签: matlab image-processing

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

enter image description here

我不确定错误在哪里。任何帮助解决这个问题将不胜感激。提前谢谢。

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))

3 个答案:

答案 0 :(得分:2)

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

基本上,您只是执行数据转换,其中图像像素强度映射到具有已知均值和标准差的普通PDF上的值。这是与PDF相同,这就是为什么总和不是1.除此之外,图像像素强度甚至不遵循正态分布本身,所以没有任何办法分布的总和是1。

除了normpdf的输出之外,没有更多的说法不是你期望的那样。您应该选择更仔细地阅读normpdf的文档:http://www.mathworks.com/help/stats/normpdf.html

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

只是为了验证,让我们使用您在帖子中提供的图片。我们将从StackOverflow中读到这个。一旦我们这样做,计算PDF然后总结所有箱子:

%// 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的总和。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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