我终于用 lennon310 解决了我的问题here。 我有一张时频图片中数千个薄峰的图片。 我无法在一张照片中同时看到。 根据我的时间窗口的物理宽度,会出现一些窗口,有些窗口可见。
我按imagesc
所有图片均来自相同的数据点 T,F,B 。
如何在Matlab中的图片中一次绘制所有峰值?
答案 0 :(得分:1)
您需要使用重新采样来调整图像大小以防止混叠效果(这种情况被描述为不可避免)。
例如,MATLAB imresize
函数可以执行抗锯齿。不要使用“最近的”调整大小方法,这就是你现在拥有的方法。
答案 1 :(得分: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);
哪些是问题。
我再次得到分辨率不够的图片
答案 2 :(得分: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');
因为分配是双线性的。
答案 3 :(得分:0)
BenVoigt回答的第3次扩展
我现在通过
绘制图片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);
答案 4 :(得分:0)
对BenVoigt的第4次延期回答和评论
我删除了过滤器并添加了随机相对错误。 我设置T,F,B的大小,然后运行
imagesc([0 numel(T)], [0 numel(F)], B, [0 numel(B)])
我仍然使用显着的别名但不同的图片
答案 5 :(得分:-1)
这不是轻率,但我认为唯一的方法是使用更高像素密度的更宽的显示器。 MATLAB和您的视频卡只能在屏幕上显示如此多的像素,并且必须决定要显示哪些像素以及遗漏哪些像素。数据仍然存在,只是没有显示。由于您有很多非常窄的线条,因此在决定点亮哪些像素时会有一些线条被跳过。更改时间窗口大小会更改哪些行消除别名以及哪些行足够幸运以显示在屏幕上。
我的建议是,没有特别的顺序:沿着时间轴用高斯卷积你的线以扩大它们,从而增加部分峰值出现在屏幕上的可能性。在600 dpi打印机上打印出来,看看它们是否出现。制作几个图,每个图在一个单独的时间窗口放大。
答案 6 :(得分:-1)
BenVoigt回答的第3次扩展
我尝试告诉imagesc
制作图片有多大,而不是让我们使用显示器尺寸,这样就不会丢失数据。
imagesc(T*t, F*fs, B, [50 50]);
% imagesc(T*t, F*fs, B');
% This must be last
imresize(image, 'bilinear', [64 30],);
我不确定在x轴和y轴上指定像素数量的位置,无论是在imagesc
还是imresize
命令中。
在此处调整图片大小的正确方法是什么?