我正在查看 aurio 触摸超声图示例,发现它显示了不同的 FFT 频带,具体取决于它们的幅度,颜色范围从蓝色到紫色到红色再到白色。当没有声音时,图形为黑色。对于低强度声音,不同的波段显示蓝色。当声音幅度增加时,颜色变得“更热”——变成红白热。这有助于用户轻松查看正在发生的事情。
我需要关于如何在不知道信号的最大幅度将是多少的情况下实现类似颜色编码算法的建议。
我曾尝试创建类似的东西,但到目前为止收效甚微。这是我正在使用的代码:
预先计算不同幅度的 FFT 的颜色
colorMapGreen = [[NSMutableDictionary alloc] initWithCapacity:256];
for(int i = 0; i<256; i ++)
{
[colorMapGreen setObject:[UIColor colorWithHue:0.2 saturation:1 brightness:(i/256.0) alpha:1] forKey:[NSNumber numberWithInt:i]];
}
我遇到的问题是我不知道我将看到的信号的最大幅度是多少。它变化很大 - 从 12000 到 50000。如果我尝试调整我的颜色映射,结果要么太暗要么太亮,而且没有真正的描述性。
以下是我尝试区分不同幅度带的方法。我真的希望低端(低于 4000)出现并与其他频段相比可见。
magnitude=sqrt(magnitudes[i]);
if(magnitude<4000)
{
//0 to 128
index = magnitude*0.0213;
}else if(magnitude < 15000)
{
//to 168
index = magnitude*0.0112;
}else if(magnitude < 30000)
{
//to 196
index = magnitude*0.00653;
}else if(magnitude < 100000)
{
//to 228
index = magnitude*0.00228;
}else if(magnitude < 10000000)
{
index = magnitude*0.0000256;
}else
{
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [UIColor whiteColor];
}
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [colorMapGreen objectForKey:[NSNumber numberWithInt:index]];
谁能建议一种看起来更接近 AurioTouch 的冷热示例的颜色映射算法的实现?
这是我的代码显示的内容:
最佳答案
需要覆盖宽动态范围的颜色图通常使用缩放的对数(幅度)而不是绝对幅度进行着色,以索引到映射表或方程式中。
关于iOS 如何在最大震级未知时为热/冷频谱图选择颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499486/