如何找到嘈杂图的平均值才能获得FWHM?

时间:2014-07-10 12:13:45

标签: matlab image-processing

我被认为是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:');

非常感谢。

1 个答案:

答案 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将数组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了解更多信息。

希望有所帮助