2014-07-10 72 views
0

我被認爲是MATLAB的初學者。 我需要找到一些圖形的FWHM,這些圖形在峯值時相當嘈雜且不一致。 下面是我的基本代碼,在一些來自stackoverflow用戶的代碼的幫助下。如何找到噪聲圖的平均值以獲得FWHM?

DD11=dicomrt_read3ddose(1,'waterphantom50x1mm15x1cmslabs500Mill_2.5cmFS_20cmx20cmDE.3ddose'); 
%plot first function 
a=squeeze(DD11(100,:,55)); 
figure; 
plot(a); 
hold on; 
%find half of maximum value 
max(a); 
halfAmax=0.5*(max(a)); 
%plot straight line across the first function 
x2=[1:1:200]; 
LineValue=halfAmax; 
plot(x2,LineValue); 


%Find the starting indices of those segments of consecutive points that exceed LineValue 
idx = find(diff(a >= LineValue)) 
hold on; 
x3 = x2(idx) + (LineValue - a(idx)) .* (x2(idx+1) - x2(idx)) ./ (a(idx+1) - a(idx)) 
plot(x3, LineValue, 'go', [x2(1) x2(end)], LineValue*[1 1], 'k:'); 

%distance of the two points 
fwhmwidth=[x3(end)-x3(1)].*0.1 

hold on; 

%plot first function 
b=squeeze(DD11(100,:,7)); 
plot(b); 
hold on; 
%find half of maximum value 
max(b); 
halfAmax=0.5*(max(b)); 
%plot straight line across the first function 
x2=[1:1:200]; 
LineValue=halfAmax; 
plot(x2,LineValue); 


%Find the starting indices of those segments of consecutive points that exceed LineValue 
idx = find(diff(b >= LineValue)) 
hold on; 
x3 = x2(idx) + (LineValue - b(idx)) .* (x2(idx+1) - x2(idx)) ./ (b(idx+1) - b(idx)) 
plot(x3, LineValue, 'go', [x2(1) x2(end)], LineValue*[1 1], 'k:'); 

%distance of the two points 
fwhmwidth=[x3(end)-x3(1)].*0.1 

我希望那個; (1)我可以找到這些峯值的平均值,因爲它們很嘈雜 (2)我可以更好地解釋我上面的代碼,如下所示;

%Find the starting indices of those segments of consecutive points that exceed LineValue 
    idx = find(diff(b >= LineValue)) 
    hold on; 
    x3 = x2(idx) + (LineValue - b(idx)) .* (x2(idx+1) - x2(idx)) ./ (b(idx+1) - b(idx)) 
    plot(x3, LineValue, 'go', [x2(1) x2(end)], LineValue*[1 1], 'k:'); 

非常感謝。

回答

0

應答(2):

%Find the starting...是解說。在Matlab中,它們由%開始。

idx = find(diff(b >= LineValue))定位數組diff(b >= LineValue)的所有非零元素,並返回矢量idx中那些元素的線性索引。在這種情況下,它只會返回第一個非零元素。檢查Find

hold on指的是情節。你已經有了一個陰謀,通過使用hold on,你將會在同一個陰謀中增加更多的曲線。

x3 = x2(idx) + (LineValue - a(idx)) .* (x2(idx+1) - x2(idx)) ./正在用數字和矩陣執行操作。 c = a .* b將元素ab乘以元素並將結果返回c。輸入a和b必須具有相同的大小,除非其中一個是標量。您可以通過點擊F1來查看Matlab幫助。

plot(x3, LineValue, 'go', [x2(1) x2(end)], LineValue*[1 1], 'k:')繪製2條不同的曲線。第一項包含x軸值,第二項包含y軸值,第三項包含LineStyle,Color和Marker的信息。在這種情況下,'go' =綠色圓圈,'k:' =黑色圓點。查看Matlab's plot documentation瞭解更多信息。

希望可以幫到