我被认为是MATLAB的初学者。 我需要找到一些图表的FWHM,这些图表在高峰时非常嘈杂且不一致。 下面是我的基本代码,借助stackoverflow用户的一些代码。
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 :(得分: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
将数组a
和b
逐个元素相乘,并在c
中返回结果。输入a和b必须具有相同的大小,除非一个是标量。您可以通过单击 F1
plot(x3, LineValue, 'go', [x2(1) x2(end)], LineValue*[1 1], 'k:')
绘制了2条不同的曲线。第一项包含x轴值,第二项包含y轴值,第三项包含有关LineStyle,Color和Marker的信息。在这种情况下,'go'
=绿色圆圈,'k:'
=黑点。请查看Matlab's plot documentation了解更多信息。
希望有所帮助