Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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高斯分布之和大于1_Matlab_Image Processing - Fatal编程技术网

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

图像的MATLAB高斯分布之和大于1,matlab,image-processing,Matlab,Image Processing,我使用下面的代码来计算下面给出的图像像素强度的概率。然而,概率的总和sum(总和(像素概率))大于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(总和(像素概率))
大于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\u D p(x)dx$所有域上的积分。

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

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

pdf的总和等于1。 输出的总和不是。参见,Y=normpdf(X,mu,sigma)使用平均mu和标准偏差sigma的正态分布计算X中每个值的pdf

pdf的总和等于1。
输出的总和不是。您要做的是计算图像中每个像素的PDF值
Iprob
不是一个正态分布,但您只是简单地使用图像像素从已知平均值和标准偏差的分布中采样

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

除了
normpdf
的输出之外,没什么可说的了,它不是您所期望的。您应该选择更仔细地阅读
normpdf
的文档:


如果您希望确定图像的实际PDF,您需要做的是找到图像的直方图,而不是进行数据转换。你可以用它来做。一旦你这样做了,假设遇到的强度是等概率的,你将每个直方图条目除以图像的总大小,然后沿着所有箱子求和。在这种情况下,总和应该是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的总和。

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

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

除了
normpdf
的输出之外,没什么可说的了,它不是您所期望的。您应该选择更仔细地阅读
normpdf
的文档:


如果您希望确定图像的实际PDF,您需要做的是找到图像的直方图,而不是进行数据转换。你可以用它来做。一旦你这样做了,假设遇到的强度是等概率的,你将每个直方图条目除以图像的总大小,然后沿着所有箱子求和。在这种情况下,总和应该是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的微小差异可能是数值误差。还有,Im是什么?(Im是一个数值虚部的matlab函数)。Im是一个图像,它为我的图像求和(sum(ProbofPixelineTensities))=514。6251@cosmoscalibur,
Im
不是MATLAB命令。虚部的函数是
imag
请用默认的matlab图像发布整个函数。请尝试cameraman.tifI更新的代码,如您所愿。比1大多少?与1的微小差异可能是数值误差。还有,Im是什么?(Im是一个数值虚部的matlab函数)。Im是一个图像,它为我的图像求和(sum(ProbofPixelineTensities))=514。6251@cosmoscalibur,
Im
不是MATLAB命令。虚部的函数是
imag
请用默认的matlab图像发布整个函数。请尝试cameraman.tifI更新代码