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

Nice Way to Visualize DCT Coefficients as an Image

下图是我拍的:

将其分成 8X8 个图块,对每个图块进行 2D DCT 变换,并将它们切割成每个轴上的前 30 个系数。现在我试图将结果可视化为图像,这将有助于我在 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

有更好的主意吗?

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

找到了:我要找的是直方图均衡化。实施非常简单:

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  

单个图块的结果:

对于整张图片:

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