0

我终于用lennon310解决了我的问题。我在时频图片中有数千个细峰的图片。我不能在一张照片中看到所有相同的时间。根据我的时间窗口的物理宽度,一些窗口出现,一些可见。

我绘制的数据图片imagesc

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

所有图片都来自相同的数据点T、F、B

如何在 Matlab 中一次绘制所有峰值?

4

7 回答 7

1

您需要使用重采样来调整图像大小以防止出现锯齿效应(craigim 将其描述为不可避免)。

例如,MATLABimresize函数可以执行抗锯齿。不要使用“最近的”调整大小方法,这就是你现在所拥有的。

于 2013-12-31T18:23:14.987 回答
0

BenVoigt 的回答和评论的第四次扩展

我删除了过滤器并添加了随机相对误差。我设置了 T、F、B 的大小,然后运行

imagesc([0 numel(T)], [0 numel(F)], B, [0 numel(B)])

我仍然有明显的混叠但图片不同

在此处输入图像描述

于 2014-01-08T14:59:55.090 回答
0

@BenVoigt 答案的扩展

我的尝试

B = abs(B);
F1 = filter2(B,T); % you need a different filter kernel because resolution is lower    
T = filter2(B,F);
F = F1;
image1 = imagesc(B);
display1 = imresize(image1, [600 600], 'bilinear');   
imshow(T*t, F*fs, display1); 

哪里有问题。

我又得到了分辨率不够的图片

在此处输入图像描述

于 2013-12-31T18:36:18.250 回答
0

BenVoigt 答案的第三次扩展

我现在绘制图片

imagesc([0 numel(T)], [0 numel(F)], B);              

我的照片中有一个很大的混叠问题。可能,这样的事情应该是操纵时频表示

T = filter2(B,t); % you need a different filter kernel because resolution is lower    
F = filter2(B,fs);
于 2014-01-02T17:15:48.270 回答
0

BenVoigt 答案的第二次扩展

我对一个内核过滤器的建议是相对随机误差的卷积

data(find(data ~= 0)) = sin(pi .* data(find(data ~= 0))) ./ (pi*data(find(data ~= 0)));        
data(find(data == 0)) = 1; % removing lastly the discontinuity
data1 = data + 0.0000001 * mean(abs(data(:))) * randn(size(data));
data = conv(data, data1);

这就是 BenVoigt 所说的用于分发的内核过滤器的意思吗?

这给出了类似的结果

在此处输入图像描述

那里的决议仍然是一个问题。如果我调整窗口大小,中心峰往往容易成倍增加。

我在上图中激活了旧代码,但它并没有改变结果。上面的代码对于显示器的内核过滤器还是不够用的。可能,一些滤波器函数仍然必须分别应用于时间和频率轴,例如:

F1 = filter2(B,T); % you need a different kernel filter because resolution is lower    
T = filter2(B,F);
F = F1;

这些过滤器弄乱了两个轴上的值。我需要更好地了解他们来解决这个问题。但首先要了解它们是否是正确的方法。

该图已重新调整大小。数据大小为 5001x1 双倍,F 和 T 为 13635x1 双倍。所以我认为我应该在设置轴、标签和标题后最后调整大小

imresize(image, [13635 13635], 'bilinear');   

因为分布是双线性的。

于 2014-01-01T18:26:36.670 回答
-1

BenVoigt 答案的第三次扩展

我试图告诉imagesc制作图像有多大,而不是让使用显示器尺寸,所以它不会丢失数据。

imagesc(T*t, F*fs, B, [50 50]);           
% imagesc(T*t, F*fs, B');

% This must be last
imresize(image, 'bilinear', [64 30],);   

我不确定应该在命令imagescimresize.

在这里调整图像大小的正确方法是什么?

于 2014-01-02T11:18:22.397 回答
-1

这并不是轻率,但我认为唯一的方法是获得具有更高像素密度的更宽显示器。MATLAB 和您的视频卡只能在屏幕上显示这么多像素,并且必须决定显示哪些以及忽略哪些。数据还在,只是没有显示。由于您有很多非常窄的线条,因此在决定要点亮哪些像素时会跳过其中一些线条。更改时间窗口大小会改变哪些行被混叠,哪些行幸运地出现在屏幕上。

我的建议是,没有特别的顺序:沿着时间轴用高斯线对线进行卷积以扩大它们,从而增加部分峰值出现在屏幕上的可能性。在 600 dpi 打印机上打印出来,看看它们是否出现。制作几个图,每个图都放大一个单独的时间窗口。

于 2013-12-31T17:32:43.227 回答