【问题标题】:Nice Way to Visualize DCT Coefficients as an Image将 DCT 系数可视化为图像的好方法
【发布时间】:2015-04-07 17:38:46
【问题描述】:

我拍了下图:

将其分成8X8 瓦片,对每个瓦片进行 2D DCT 变换,并将它们切成每个轴上的第一个 30 系数。现在我试图将结果可视化为有助于我在 DCT 平面上直觉的图像。

问题:

  • (0,0) 的 DCT 系数比其他所有系数都大
  • 我想看看正系数和负系数之间的区别。

到目前为止,我发现的最佳转换如下:

def visualize_dct(d):
    d = np.log(abs(d).clip(0.1))
    maxi, mini = d.max(), d.min()
    d = 255*(d - mini)/(maxi-mini)
    return d

这给了我下面的图片:

完整代码在这里: http://nbviewer.ipython.org/github/ihadanny/my-py-notebooks/blob/master/img_processing_04.ipynb

有更好的想法吗?

【问题讨论】:

    标签: python image-processing signal-processing dct


    【解决方案1】:

    找到它:我正在寻找的是直方图均衡化。实现非常简单:

    def visualize_dct(d):
        d = d + abs(d.min())
        h = np.histogram(d, bins=1000, range=(0, d.max()))
        c = 255.0*np.cumsum(h[0])/sum(h[0])
        new_img = np.zeros(d.shape)
        for index,value in np.ndenumerate( d ):
            new_img[index] = c[999.0*value/d.max()]    
        return new_img  
    

    单个图块的结果:

    对于整个图像:

    (注意简单的瓷砖和有很多细节的瓷砖之间的区别)

    【讨论】:

      【解决方案2】:

      你可以改变数值,让所有的都是正数;然后取单个对数(顺便说一下,这是转换为 dB 的基础),并将其绘制为颜色。

      【讨论】:

      • 试过你的建议,它看起来很平:(你是这个意思吗?d = d + abs(d.min()) + 1.0; d = np.log(d); maxi, mini = d.max(), d.min(); d = 255*(d - mini)/(maxi-mini);
      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多