【问题标题】:Sum of MATLAB Gaussian distribution of an image is greater than 1图像的 MATLAB 高斯分布之和大于 1
【发布时间】:2015-05-14 11:03:04
【问题描述】:

我正在使用下面的代码来计算下面给出的图像的像素强度概率。但是,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))

【问题讨论】:

  • 大于 1 是多少?与 1 的细微差别可能是数值错误。还有,我是什么? (Im 是一个值的虚部的 matlab 函数)。
  • 我是一个图像,它为我的图像提供 sum(sum(probOfPixelIntensities)) = 514.6251
  • @cosmoscalibur, Im 不是 MATLAB 命令。虚部函数为imag
  • 请用默认的matlab图像发布整个。试试 cameraman.tif
  • 我根据你的需要更新了代码

标签: matlab image-processing


【解决方案1】:

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

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

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


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

只是为了验证,让我们使用您在帖子中提供的图片。我们将从 StackOverflow 中读到这一点。完成后,计算 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 的总和。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 2014-12-26
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多