【问题标题】:Coefficient Thresholding by keeping largest coefficients通过保持最大系数进行系数阈值化
【发布时间】:2014-05-30 22:16:11
【问题描述】:

我一直在使用一些转换进行一些实验,例如在 Matlab 中对图像数据进行 DCT。 使用 512x512 px lena 图像的 DCT 示例:

x = double(imread('lenna.bmp')); R = dct2(x);

然后,我想通过保留 R 的 100000 个最大系数来对变换系数进行阈值处理,并将剩余的设置为零。

我该怎么做?

【问题讨论】:

  • 我试过使用全局阈值 sqrt(2*log(number.of coefficient)
  • 这是您想要的全局阈值。尝试构建一个逆直方图,然后您可以找到哪个值将您的样本拆分为 100.000 个较大的系数和其他系数。使用此值作为阈值。
  • sqrt(2*log(number.of coefficient)) 期望提供的公式是什么?系数的数量是多少?请注意,这与(number.of coefficient) 相同,对吧? 2*log(x) = log(x^2)。

标签: matlab


【解决方案1】:

使用prctile 查找恰好超过或等于R 的100000 个条目的值。然后将该值用作阈值,即将所有较低的值设置为零:

threshold = prctile(R(:),(1-1e5/numel(R))*100); %// compute threshold
R(R<threshold) = 0; %// set values below the threshold to zero

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多