我拍了这张照片:
将其划分为80X80个图块,在每个图块上进行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
答案 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
单个图块的结果:
并为整个图像:
(注意简单瓷砖和具有大量细节的瓷砖之间的差异)
答案 1 :(得分:0)
您可以移动值,以便所有值都是正值;然后取个体对数(顺便说一句,它是转换为dB的基础),并将其绘制为颜色。