收集42亿个8×8像素图,对它们排序,让形状接近的图排在接近的位置。然后输入ANN1,它以8×8×3字节为输入,32比特为输出。再训练ANN2,它以32比特index为输入,8×8的pixels为输出。
总数据量为:(8×8×3+4)B×4G=784GB
相当于有一个2列42亿行的表,ANN1用pixels查询index,ANN2用index查询pixels。
编码时,输入为pixels
index=ANN1(pixels)
pixels2=ANN2(index)
Δp=pixels2-pixels
压缩Δp为P,并和4字节的index一起储存为图像文件。
解码时,取出index和P
pixels=ANN2(index)+解压缩(P)
预测Δp不太复杂,则P可以被压缩得很小。而index只有4字节,总的压缩率很好。
使用两个ANN实属迫不得已,如果可以用查表法解决,这需要记录784GB数据,并且运算量很大。使用两次ANN,目的是找出与输入的pixels最接近的那个记录pixels。
改进
4字节有42亿种变化,这或许太大了。取3字节有1600万种变化。更进一步,取2字节,只有65536种变化。
3字节方案:收集5×5、6×6或4×4像素图1600万个,如上述方法训练ANN。放弃Δp,直接用index存储。压缩率也好计算:5×5像素用3字节表示,压缩率=1/25。
2字节方案:收集4×4或3×3像素图65536个,训练ANN。若取2×2像素,则压缩率只有1/6,还不如jpg,没有竞争力啊。