使用值前后分析所需的值::: Radiometric Calibration - Streaking

时间:2012-07-17 14:32:48

标签: matlab loops increment decrement calibration

假设我有一个1x15的数据表

 [21 78 33 59 90 26 88 54 36 63 72 37 48 93 56]

因此,对于我的条纹方程式,我需要实现这个:

%Streaking = {[abs(Q_n - ((Q_n-1 + Q_n + 1)/ 2))] /((Q_n-1 + Q_n + 1)/ 2)))} * 100

等式的解释:

让我们将值90分配给Q_n(这来自单元格(1,5))使用这个值意味着对于Q_n-1我们想要值59和Q_n + 1我们想要值26 (实质上是(1,4)之前的细胞和(1,6)之后的细胞)

Q_n = 90

Q_n-1 = 59

Q_n + 1 = 26

我的问题是:我如何为整个数据集执行此操作并将其应用于条纹方程式? (不包括第1行和第15行,因为第1行不能有Q_n-1而第15行不能有Q_n + 1)

我正在想一些可能的事情:

Q_n = 1;
while Q_n < length(middle.middle_interpolate)
    Q_n = Q_n+1;
    before = middle.middle_interpolate{Q_n-1};
    actual = middle.middle_interpolate{Q_n};
    after = middle.middle_interpolate{Q_n+1};
    averg = ((before + after)/2);
    equation = (abs(actual-averg)/averg)*100;
    plot(equation);
end

1 个答案:

答案 0 :(得分:1)

我把它分成了几部分所以你可以看到我在做什么。它也适用于这个特定的数据集,因为标记是硬编码的(但我敢打赌,你可以弄清楚如何让它适用于你拥有的任何数据集)。

averg = mean([Qn(1:13),Qn(3:15)],2); % this is just getting your averg value.
actual = Qn(2:14);
equation = abs(actual-averg)./averg*100;
plot(equation)

当然你可以把这一切都放在一条线上,让它看起来很疯狂......

equation = abs(mean([Qn(1:13),Qn(3:15)],2) - Qn(2:14))./mean([Qn(1:13),Qn(3:15)],2)*100

但是对于那些可能会在将来查看代码的人来说,你想让它保持一定的可读性。