情节的规范化

Normalization of a plot

我需要将绘图标准化为从 0 到 255 的灰度。数据为 .txt 格式。这是我的粗略绘图:

clf;
%call importdata() after changing current directory
B = importdata('sigpros.txt');

d  = 1000; %vertical spacing
Bs = B;    %copy of the original data

for i = 1 : size(Bs,2)
    %loop adding constant to each column
    Bs(:,i) = Bs(:,i) + (i-1) * d;
end    

%plot the modified matrix
plot(Bs);

数据由349行4007列组成。每列都是完整的 A 扫描数据(波形)。每个数据都有一个垂直间距,全套这些绘制数据构成 B 扫描数据(从传感器位移获得的波形)。我不确定上面的代码是否正确,但数据应该类似于:B-Scan data。

这可以通过将上面的矩阵图标准化为 0 到 255 的灰度来实现。目前,我的图是这样的:My plot。请帮助我获得所需的 B 扫描图,如上图所示!谢谢!

更新

这是normalized b-scan data。但是,它最初达到峰值的方式高于上图中的方式。这里可能是什么问题?

零偏移去除

clf;
%call importdata() after changing current directory
B = importdata('A_scan1.txt');
Bd = detrend(B,0); %remove the zero offset

d  = 1000; %vertical spacing
Bs = Bd;    %copy of the original data

for i = 1 : size(Bs,2)
    %loop adding constant to each column
    Bs(:,i) = Bs(:,i) + (i-1) * d;
end    

minV = min(Bs(:));
maxV = max(Bs(:));
Bs_scale = (Bs-minV)*255/(maxV-minV);

%plot the modified matrix
plot(Bs_scale, 'k');

但是,还是没有从0开始。

这将设置偏移量,使第一行的起点为零并缩放所有数据,使从最小值到最大值的范围为 255 个单位。

我注释掉了但包含了一些可以替代缩放数据的行,以便它从 0 开始并且峰值在 255。但是,由于您有一些负值,因此总范围 > 255。

clf;
%call importdata() after changing current directory
B = importdata('sigpros.txt');

%NOTE: I am only plotting the first 59 lines as the rest don't look as good
Bd = detrend(B(:,1:59),0); %remove the zero offset

d  = 1000; %vertical spacing
Bs = Bd;    %copy of the original data

%Get the initial zero offset from the first line
initOffset = Bs(1,1);
%% xxx Alternatively take the mean across all starting points xxx
% initOffset = mean(Bs(1,:));

for i = 1 : size(Bs,2)
    %loop adding constant to each column
    Bs(:,i) = Bs(:,i) - initOffset + (i-1) * d ; %subtract the offset from each
end    

minV = min(Bs(:));
maxV = max(Bs(:));

%This make the RANGE from min to make = 0-255 units.
Bs_scale = (Bs)*255/(maxV-minV);
%% xxxx If instead you want the peak to be at 255 xxxxx
% Bs_scale = (Bs)*255/(maxV);

%plot the modified matrix
plot(Bs_scale, 'k');

EDIT/Explanation:

Here is what B looks like Raw.。它基本上是一系列相互重叠的线条。在你 detrend 之后,它会删除大部分常量偏移量。 然而,由于这个信号不是完全对称的,这些线并不是从零开始的……它们比原来更近,但并不完美。 Here is Bd 在 detrend 之后请注意,每一行都不是从零开始的。

接下来您的 for 循环最初通过添加 d so it looked like this 的倍数将每行间隔 1000。由于这些行并不完全从零开始,这正是您所要求的,所以我添加了初始偏移项。这些基本上取第一行的第一个点,并从每一行中减去它。因此迫使它从零开始。