V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hahaayaoyaoyao
V2EX  ›  分享创造

搞了一个有损图像压缩算法

  •  
  •   hahaayaoyaoyao · 2022-01-18 13:36:56 +08:00 · 2830 次点击
    这是一个创建于 1040 天前的主题,其中的信息可能已经有所发展或是发生改变。
    8 条回复    2022-01-19 11:43:53 +08:00
    coderluan
        1
    coderluan  
       2022-01-18 15:12:16 +08:00   ❤️ 1
    楼主你可以尝试算一下图像的 PSNR 或者 SSIM ,这些是评价图像质量的标准,拿你和这个和一般的压缩算法对比一下,就知道有没有用了。
    mxT52CRuqR6o5
        2
    mxT52CRuqR6o5  
       2022-01-18 15:16:10 +08:00   ❤️ 1
    [删除每一个像素(24 位)每个 RGB 值的最后一位(降低对比度)]
    那你这压缩率应该为 7/8 啊,看你这 [179.1kb 29.4kb] 压缩前后的尺寸对比应该还有其他操作
    imn1
        3
    imn1  
       2022-01-18 15:32:07 +08:00
    为何内存复原和文件复原相差那么大?

    我没能力做技术评价,只是好奇适用在什么场景
    killeder
        4
    killeder  
       2022-01-18 15:39:13 +08:00
    这个有损是多损
    Thiece
        5
    Thiece  
       2022-01-18 16:26:40 +08:00   ❤️ 1
    ReVanTis
        6
    ReVanTis  
       2022-01-18 16:28:19 +08:00   ❤️ 1
    https://github.com/ZTFtrue/compress-image/blob/main/OpenCV_learn.cpp#L45

    如果我没看错的话,你直接把 rgb 的值 /10 了,大概是把每个通道 8 位深的 0-255 的范围(RGB888)降到了 0-25 。

    大概也就是降为不到 5 位深(0-31),RGB 总共是不到 15 位深。

    这个大概也就比 16 位色(RGB565)差那么一点点。

    鉴于 log(2,25) = 4.64...,所以你大概是实现了一个类似于 RGB888 转 RGB 4.6 4.6 4.6 的转码器。

    干得漂亮!
    c0xt30a
        7
    c0xt30a  
       2022-01-19 04:11:25 +08:00
    真是简单粗暴。。。
    用 KNN 可能更文雅些
    chenzhekl
        8
    chenzhekl  
       2022-01-19 11:43:53 +08:00 via iPhone   ❤️ 1
    这就是 jpeg 压缩时的 quantization ,不过比 jpeg 做的要简单粗暴。jpeg 利用人眼对亮度敏感、但对色彩不敏感的特性,先把图像转换到 YCbCr 色彩空间,再只对 Cb 和 Cr 分量做 quantization 。理论上 jpeg 要更合理,而且 jpeg 还会做 DCT 、丢弃高频信息,所以 lz 的算法还是比不过 jpeg 的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.