我想在MATLAB中生成一幅多重高斯图像。这张照片包括三个圆圈。每个圆的强度服从高斯分布。总之,图像的直方图将是一个与预期直方图相同的多重高斯分布。

这是我的密码。然而,它没有达到我的预期直方图。你能帮我生成一个像上面这样的直方图的图像吗?
rows=256; columns=256;
grayImage=zeros(rows,columns);
t = linspace(0,2*pi,50); % approximated by 100 lines
r = (rows-10)/2; % circles will be separated by a 10 pixels border
circle1 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
r = (rows-10)/3;
circle2 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
r = (rows-10)/5;
circle3 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
grayImage(circle1) =30;
grayImage(circle2) =100;
grayImage(circle3) =130;
im_normal=double(grayImage)./max(grayImage(:));
v = var(im_normal(:));
im_noise= imnoise(im_normal,'gaussian',0,v/20);
subplot(131);imshow(grayImage,[]); title('Free-noise image');
subplot(132);imshow(im_noise);title('Noisy image');
subplot(133);imhist(uint8(255.*im_noise)); title('Hist. of noisy mage');这是我上面代码的图像。谢谢大家

发布于 2016-03-01 14:28:11
首先,您的代码中有一些错误。
当您从unit8转换为double时的第一个。您不需要除以最大值,但被255,因为这是理论上的最大值,无论你是否在你的形象(否则,你为什么要乘255之后?!!)
同时,我将这两幅图像显示为uint8。更改后的代码显示如下:
rows=256; columns=256;
grayImage=zeros(rows,columns);
t = linspace(0,2*pi,50); % approximated by 100 lines
r = (rows-10)/2; % circles will be separated by a 10 pixels border
circle1 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
r = (rows-10)/3;
circle2 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
r = (rows-10)/5;
circle3 = poly2mask(r*cos(t)+rows/2+0.5, r*sin(t)+columns/2+0.5, rows, columns);
grayImage(circle1) =30;
grayImage(circle2) =100;
grayImage(circle3) =130;
im_normal=double(grayImage)./255;
v = var(im_normal(:));
im_noise= imnoise(im_normal,'gaussian',0,v/20);
subplot(131);imshow(grayImage,[]); title('Free-noise image');
subplot(132);imshow(mat2gray(im_noise),[]);title('Noisy image');
subplot(133);imhist(uint8(255.*im_noise)); title('Hist. of noisy mage');给出一个形象,如:

现在直方图看起来更相似了。但为什么不一样呢?
有两个不同的事情正在发生。一个是真正的直方图从0到50之间的很多值开始,第二个是这个高斯人的大小不符合你的“客观”直方图。让我们一个接一个地给他们讲讲。
第一个问题是卵形:你的图像不仅有3种颜色,而且有一个黑色的背景!因此,你的直方图将有3个高斯和许多黑色。如果您想要删除这一点,您需要确保您的3个级别覆盖整个图像,没有留下“黑色区域”。
第二个问题是这三个块的信号,高斯人。要理解这一点,你需要意识到,这些高斯人的振幅取决于这些“单色”气泡所占据的面积。在深灰色中像素的数量远远大于白色像素的数量,因此对应于该颜色的高斯值更高。做一些简单的圆面积计算,你应该能够计算出你想要的圆的面积与其他圆成正比,这样才能得到你想要的高斯。
https://stackoverflow.com/questions/35725040
复制相似问题