2013-03-05 65 views
0

我想創建一些高斯分佈並將它們放在圖像上。高斯人隨機創建參數(幅度,位置和標準差)。首先,我將參數放入向量或矩陣中,然後使用ngrid()函數來創建一個2d空間來創建高斯,但是我得到一個錯誤(因爲使用ngrid值的數學運算可能不是微不足道的......)。錯誤是:圖像上的creatig隨機高斯

 ??? Error using ==> minus 
Integers can only be combined 
with integers of the same class, 
or scalar doubles. 
Error in ==> ss_gauss_fit at 23 
    gauss = amp(i)* 
    exp(-((x-xc).^2 + 
    (y-yc).^2)./(2*std(i))); 

的代碼是在這裏:

clear all; 
image = uint8(zeros([300 300])); 
imsize=size(image); 

noOfGauss=10; 
maxAmpGauss=160; 
stdMax=15; 
stdMin=3; 

for i=1:noOfGauss 
    posn(:,:,i)=[ uint8(imsize(1)*rand()) uint8(imsize(2)*rand()) ]; 
    std(i)=stdMin+uint8((stdMax-stdMin)*rand()); 
    amp(i)= uint8(rand()* maxAmpGauss); 
end 

% draw the gaussians on blank image 
for i=1:noOfGauss 
    [x,y] = ndgrid(1:imsize(1), 1:imsize(2)); 
    xc = posn(1,1,i); 
    yc = posn(1,2,i); 
    gauss = amp(i)* exp(-((x-xc).^2 + (y-yc).^2)./(2*std(i))); 

    image = image + gauss; 
end 

請告訴我如何解決這個問題,情節2D高斯與參數向量... 在此先感謝

回答

1

除了關於「繪製圖像」的瘋狂,我真的不明白,我想你正試圖在網格上添加一堆單獨的高斯分佈。這是我對你的代碼所做的。請注意,您的雙變量gaussians未正確歸一化,並且您之前使用的是方差而不是標準偏差。我固定後者;然而,我並沒有打擾歸一化,因爲無論如何你都將幅度值相乘。

clear all; 
xmax = 50; 
ymax = 50; 

noOfGauss=10; 
maxAmpGauss=160; 
stdMax=10; 
stdMin=3; 

posn = zeros(noOfGauss, 2); 
std = zeros(noOfGauss, 1); 
amp = zeros(noOfGauss, 1); 

for i=1:noOfGauss 
    posn(i,:)=[ xmax*rand() ymax*rand() ]; 
    std(i)=stdMin+(stdMax-stdMin)*rand(); 
    amp(i)= rand()* maxAmpGauss; 
end 

% draw the gaussians 
[x,y] = ndgrid(1:xmax, 1:ymax); 
z = zeros(xmax, ymax); 

for i=1:noOfGauss  
    xc = posn(i,1); 
    yc = posn(i,2);  
    z = z + amp(i)* exp(-((x-xc).^2 + (y-yc).^2)./(2*std(i)^2)); 
end 

surf(x, y, z); 

隨機輸出:

enter image description here

+0

感謝,這正是我一直在尋找幫助我得到一些Python代碼工作。 – Aesir 2014-07-13 13:44:25