【问题标题】:Jpeg compression artefact (green pixel)Jpeg 压缩伪像(绿色像素)
【发布时间】:2016-12-13 22:27:22
【问题描述】:

我正在编写手工 jpeg 算法。但是,量化步骤似乎有问题: 这是我要编码的图片:Lena.png

这是量化步骤之后的结果(+解码但没有哈夫曼编码的东西):post quantization result

现在我的这一步代码:

def quantification(transformee) :
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61 ),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55 ),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56 ),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62 ),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77 ),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92 ),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101 ),( 72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float)
quanti=[]
for i in transformee :
    k=i/matrice
    quanti+=[np.around(k)]
return quanti

def dequantification(quanti) :
matrice=np.array([(16 , 11 , 10 , 16 , 24 , 40 , 51 , 61 ),(12 , 12 , 14 , 19 , 26 , 58 , 60 , 55 ),(14 , 13 , 16 , 24 , 40 , 57 , 69 , 56 ),(14 , 17 , 22 , 29 , 51 , 87 , 80 , 62 ),(18 , 22 , 37 , 56 , 68 , 109 , 103 , 77 ),(24 , 35 , 55 , 64 , 81 , 104 , 113 , 92 ),(49 , 64 , 78 , 87 , 103 , 121 , 120 , 101 ),( 72 , 92 , 95 , 98 , 112 , 100 , 103 , 99)],dtype=float)
retour_transformee=[]
for k in quanti :
    temp=np.zeros((8,8),dtype=float)
    for i in range(8) :
        for j in range(8) :
            temp[i,j]=matrice[i,j]*k[i,j]
    retour_transformee.append(temp)
return retour_transformee

transformee 是一个 8*8 矩阵的列表(已使用 DCT)。 量化矩阵是维基百科中给出的(JPEG)

抱歉算法中的法语部分

【问题讨论】:

    标签: compression jpeg quantization


    【解决方案1】:

    图像看起来像您在解码后没有剪裁值。

    通过量化改变的 DCT 系数可能会导致 IDCT 产生 0-255 范围之外的值。

    【讨论】:

    • 感谢您的建议,我确实更正了我的算法。但是,我对 IDCT 结果进行了测试:所有系数都在 0 到 255 之间([[-128:+127]] 将值集中在 0 上)。最后一张照片也是如此。
    【解决方案2】:

    我建议确保您的 RGB 到 YCbCr 和 YCbCr 到 RGB 的转换确保您被限制在 [0..255]。两个色彩空间重叠但不相同。

    【讨论】:

    • 谢谢建议,我去试试
    猜你喜欢
    • 2013-02-22
    • 2017-03-22
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2018-09-20
    • 2012-05-16
    • 2010-12-18
    • 2016-04-30
    相关资源
    最近更新 更多