2014-04-08 38 views
2

我需要生成隨機分葉狀輪廓如如何做到這一點下面enter image description here思路生成隨機分葉狀肺結節的輪廓

任何想法或算法? 我將要使用的軟件是MATLAB,但我有沒有問題,如果你發佈在其他語言中也解決方案...

PS我只需要畫出類似於上述的隨機輪廓......

+0

投票重新開放。爲格式提供足夠短的答案很簡單,儘管可能會有多種變化,但只有一個基本答案。答案是狹隘的,這個問題可以在幾段中回答。 –

+0

發佈的兩個答案都令人滿意......我還編輯了題目以使問題更加具體化...... – obelix

回答

5

這個怎麼樣?

degree = 5; 
numPoints = 1000; 
blobWidth = 5;  

theta = 0:(2*pi)/(numPoints-1):2*pi; 

coeffs = rand(degree,1); 
rho = zeros(size(theta)); 
for i = 1:degree 
    rho = rho + coeffs(i)*sin(i*theta); 
end 

phase = rand*2*pi; 

[x,y] = pol2cart(theta+phase, rho+blobWidth); 
plot(x,y) 
axis equal 
set(gca,'Visible','off') 

Blob

您可以通過修改degree控制 wiggliness lobulacrity。我認爲5給出了一些關於 wiggly lobotcious作爲你的例子。

這很有趣 - 希望它有幫助!

+0

我想再提一個問題......我如何在您生成的輪廓上引入更小的嘈雜變體?? – obelix

+0

可否請您提供一些關於您發佈的代碼如何工作的簡短解釋? – obelix

4

這是一個想法。

step = 0.1; 
r_min = 0.5; 
r_max = 1.0; 
ir = 35; 
tt = linspace(0, 2*pi, ir); 
t = linspace(0, 2*pi, 5*ir); 

rr = r_min + (r_max - r_min)*rand(1, length(tt)); 
rr(end) = rr(1); 
r = interp1(tt, rr, t, 'spline'); 
// add some noise of magnitude N 
N = 0.1; 
noise = -N + 2*N*rand(1, length(r)); 
noise(1:2:end) = 0.0; 
r = r + noise; 
// 
hp = polar(t, r); 
set(hp, 'LineWidth', 2) 

h = findall(gca,'type','line'); 
h(h == hp) = []; 
delete(h); 
t = findall(gca,'type','text'); 
delete(t); 
delete(findall(gca, 'FaceColor', [1 1 1])) 

典型輸出看起來像這樣(IR = 10,無噪音)

randomly generated planar closed curve

或該(IR = 35,具有和不具有噪聲)

randomly generated planar closed curve perturbed by noise

+0

我想提出一個更多的問題...我怎麼能在你生成的輪廓上引入一個額外的小嘈雜變化? – obelix

+0

@obelix我編輯了我的答案,添加了一個可以用作噪聲量值的參數'N'。如果你不想要噪聲,你可以設置N = 0.0或註釋掉代碼中的相關行。希望有所幫助。 – Drake

+0

謝謝!!!真的有用! – obelix