将dct系数可视化为图像的好方法

时间:2015-02-07 17:22:32

标签: python image-processing dct

我拍了这张照片: lizzards

将其划分为80X80个图块,在每个图块上进行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

这给了我这个形象:

dct_visualized

有更好的想法吗?

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

2 个答案:

答案 0 :(得分:3)

找到它:我正在寻找的是直方图均衡。实施非常直接:

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  

单个图块的结果:

tile tile_dct

并为整个图像:

whole_image whole_image_dct

(注意简单瓷砖和具有大量细节的瓷砖之间的差异)

答案 1 :(得分:0)

您可以移动值,以便所有值都是正值;然后取个体对数(顺便说一句,它是转换为dB的基础),并将其绘制为颜色。