最小可觉察误差(JND)与图像压缩

2023-05-16

 1. JND算法背景/意义

  1. 1算法的概述

最小可觉察误差(JND, Just Noticeable Distortion)用于表示人眼不能察觉的最大图像失真,体现了人眼对图像改变的容忍度。在图像处理领域,JND 可以用来度量人眼对图像中不同区域失真的敏感性。目前已有多个 JND 模型被提出,这些 JND 模型主要可以分为 2 类:基于像素域的 JND模型和基于变换域的 JND 模型。

像素域 JND 模型能在像素域上更为直观地给出 JND 阈值,在视频编码时常常用于运动估计以及预测残差的滤波。主要方法有:

  1. Yang 等人提出了经典的非线性相加掩蔽模型(NAMM, nonlinear additively masking model)该方法兼顾了亮度自适应掩蔽和对比度掩蔽的重叠效应。
  2. Liu 等人在 NAMM 模型的基础上,通过全变分( TV, total variation)分解对图像中的纹理以及结构分量赋以不同加权值,使像素域JND 模型具有更好的计算精度。
  3. Wu 等人则在计算纹理掩盖时进一步考虑了人眼对规则区域与非规则区域不同的敏感性,提出一种基于亮度自适应与结构相似性的JND 模型。

在变换域中,人类视觉系统 HVS 的某些特性可以方便地结合到应用中,以增强算法的整体性能。比如变换域的JND模型可以方便地把对比度敏感函数(CSF, contrast sensitivity function)引入模型中,具有较高的精度。变换域JND 模型又可以分为基于DCT域的 JND模型以及基于DWT域的JND模型。

  1. Ahumada 等人通过计算空域CSF 函数得到灰度图像的 JND 模型。
  2. Watson 提出了 DCTune 方法,进一步考虑了亮度自适应、对比度掩蔽等特性对 JND 的影响。
  3. Zhang等人通过加入亮度自适应因子和对比度掩蔽因子,使得 JND 模型具有更高的精度。
  4. Jia 等人将物体的运动等因素引入到 JND 模型中, 提出了一种更精确的视频图像 JND 模型。
  5. Wei 等人则将伽马校正引入到 JND 模型, 提出新的亮度自适应和对比度掩蔽因子计算方法。
  6. Ma 等人在 Wei 的基础上提出自适应块大小的 JND 模型,将通常 8×8 尺寸的 JND
    模型扩展到 16×16
  7. Luo 等人把 Wei JND模型推广到 4×4,并用于扩展基于 H.264 的视觉特性视频编码。
  1. 刘静,王永芳,武翠芳,张兆杨. 改进的JND模型及其在图像编码中的应用[J]. 电视技术,2011,13:15-18.
  2. 郑明魁,苏凯雄,王卫星,兰诚栋,杨秀芝. 基于纹理分解的变换域JND模型及图像编码方法[J]. 通信学报,2014,06:185-191+199.

 

算法的意义

传统的图像/视频编码技术主要针对空间域冗余、时间域冗余以及统计冗余进行压缩编码, 但很少考虑到人眼视觉系统特性和心理效应, 因此大量视觉冗余数据被编码并传输, 为了进一步提高编码的效率, 研究人员开始了致力于去除视觉冗余的研究。目前一个表征视觉冗余的有效方法就是基于心理学和生理学的最小可察觉失真模型, 即人眼不能感知的变化, 由于人眼的各种屏蔽效应, 人眼只能觉察超过某一阈值的噪声, 该阈值就是人眼的恰可觉察。

算法适用范围

JND模型常用来指导图像或视频的感知编码和处理, 如预处理、 自适应量化、 码流控制、 运动估计等。近年来, JND 模型在基于视觉特性的视频图像编码、数字水印、图像质量评价等方面受到广泛关注

 

  1. 郑明魁,苏凯雄,王卫星,兰诚栋,杨秀芝. 基于纹理分解的变换域JND模型及图像编码方法[J]. 通信学报,2014,06:185-191+199.
  2. 元家昕,马允胜. 基于人眼JND门限的多分辨率水印嵌入算法[J]. 计算机工程与应用,2006,08:63-65+95.
  3. 束道胜. 基于JND模型的视频压缩算法研究[D].安徽大学,2013.
  1. 算法原理分析
    1. 算法框架/流程

考虑到ROI和SPECK算法都在小波域进行,重点考虑基于DWT域的 JND模型。目前的图像视频编码标准主要建立在香农信息论基础之上,用概率统计模型描述信源,其压缩思想主要从去除数据冗余方面出发,如果考虑视觉上的冗余特性。人眼对不同类别区域的敏感度不同,因此可以将体现敏感程度的JND 阈值结合到量化过程中,在不同敏感区域使用不同的量化步长

最后就能保证压缩的不可察觉性。

DWT 域中最常见的视觉模型是文献[6]描述的 JND模型 ,其 JND 阈值的计算方法如下:

整体框架为:

 

图2-1 系统总体流程图

  1. 肖亮,韦志辉,吴慧中. 一种利用人眼视觉掩盖的小波域数字水印[J]. 通信学报,200223(3):100-106.
    1. 图像小波变换步骤
      1. 图像小波变换具体原理分析

它是一种时频变换分析方法,将信号展开成一族基函数(小波)加权之和,通过伸缩平移运算对信号逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节。与变换域相比,小波变换具有良好的能量集中特性,其良好的时频分解特性更符合人类视觉系统的特点。

图像经过小波变换后生成的小波图像的数据总量与原图像的数据量相等,即小波变换本身并不具有压缩功能。之所以将它用于图像压缩,是因为生成的小波图像具有与原图像不同的特性,表现在图像的能量主要集中于低频部分,而水平、垂直和对角线部分的能量则较少;水平、垂直和对角线部分表征了原图像在水平、垂直和对角线部分的边缘信息,具有明显的方向特性。低频部分可以称为亮度图像(近似图像),水平、垂直和对角线部分可以称为细节图像。人眼对亮度图像(低频)部分的信息特别敏感,对这一部分的压缩应尽可能减少失真或者无失真,其它部分可以用允许失真来提高压缩率。

 

 

图2-4 图像经三级小波变换示意图

      1. 多分辨率理论

任何共轭滤波器都可以用来刻画一种小波,它能产生实数空间中的正交基,而且快速离散小波变换何以串联这些共轭镜像滤波器来实现。这就是著名的Mallat快速算法,它把小波分解与多采样滤波器组联系起来,并且符合人体视觉系统对各频段的视觉敏感特性。Mallatt算法是是一种求解小波系数的塔形算法思想,对一幅图像完成一次一维小波变换,需要对图像的行和列分别进行一次水平和垂直滤波。小波变换将原始图像分成4个子带,即1个低频子带(LL)与3个高频子带(LH,HL,HH)。如图所示为二维图像的(一级)分解。

令I(x,y)表示大小为M*N的原始图像,L(i)表示相对于小波变换的低通滤波器系数,i=0,1,2,..Nl-1, Nl表示滤波器L的支撑长度。H(i)表示相对于小波变换的高通滤波器系数,i=0,1,2,..Nh-1, Nh表示滤波器H的支撑长度。

其中,x=0,1,…,M/2-1;y=0,1,…N-1

得到如下四个表达式

 

 

 

其中,x=0,1,…,M/2-1;y=0,1,…N-1

图2-5 Mallat快速算法的图像小波变换

      1. 小波变换总结
  1. 小波变换是后续算法的基础,不可省却。
  2. 小波变换能进行多分辨分析,同时兼顾时频域特性。小波变换是时间(空间)频率的局部化分析,通过伸缩平移运算对信号逐步进行多尺度细化,最终达到高频时间细分,低频处频率细分,能自动适应视频信号分析的要求,从而可聚焦到信号的任意细节。能克服传统傅里叶变换、短时傅里叶变换、余弦变换的缺点。(不会产生马赛克模糊)
  3. Mallat提出用共轭镜像滤波器来刻画小波,实现小波变换,小波变换变成信号的滤波过程。图像可以看做二维信号,对行和列分别进行一次水平和垂直滤波,小波变换将原始图像分成4个子带,同时可以做多尺度分析。
  4. 经过小波变换之后,有效将图像近似值和细节部分。可以通过减少细节部分的刻画实现压缩。

改进方向

  1. 提升结构的可逆整数小波变换:SPECK 采用的是离散小波变换,即第一代小波变换,该变换运算量较大,产生的是浮点数,由于计算机有限字长的影响,往往不能精确重构信号,同时也浪费了大量的时间。而整数小波变换(提升方法)不仅继承了第一代小波的多分辨率分析的优点,而且逆变换实现简单、快速和直接,能够很好地实现信号的重构。

图2-6 提升结构的小波变换示意图

[7] 朱锦华,许茹,陈华宾《给予提升小波变换的SPECK图像编码算法》

  1. 小波包分解作为小波分解的金字塔结构的推广,在高频子带也进行小波迭代分解。自适应分解产生的小波包子带结构,在小波分解基础上高频系数具有更强的能量聚集性和较高的编码率失真性能,因此图像压缩效率要优于传统的金字塔结构,尤其是对于纹理丰富的图像。小波包分解在小波分解的高频子带继续迭代分解,让高频的能量具有更强的聚集性,而且高频子带系数在左上角存在重要系数的可能性大大高于其它位置。基于以上分析,提出适合小波包子带中 S 集合的一种新的分裂方式。

[8] 张岩,聂永丹,唐国维《一种基于小波包变换的 SPECK 图像编码算法》,201210

    1. JND阈值求解

在JND模型中,主要考虑,frequency (频率),luminance(F:\JND\JND_img),texture (纹理)的综合影响。

如果对原始图像进行1层小波变换。人类视觉系统对图像第l个频带上方向为s的频率敏感度为

人类视觉系统对像素点(x,y)的亮度敏感性可由下式 表示

像素点(x,y)所在的区域的纹理复杂度可由下式表示

    1. 原理类似的其他算法

3.1.1JPEG算法对比(有优势)

1JPEG在图像区块编码采用DCT(离散余弦变换),SPECK采用的是DWT(离散小波变换)。DCT相比DWT有劣势,需要将图像分为8*8或者16*16的块(常见的两种),这样随着压缩率的增加,会产生块效应。图像边缘变得模糊,产生马赛克失真,约束了图像压缩率。

2)采用SPECKInternet图像浏览和传输上,提供质量、分辨率上图像渐进式的分级结构更有优势。

3JPEG目前应用广泛,SPECK目前较少。

4SPECK编码时间长于JPEG

3.1.2JPEG2000算法对比

(1)同样采用小波变换

(2)JPEG2000核心算法是EBCOT,采用两重编码,压缩比例更高。

(3)JPEG2000时间复杂性更大。

    1. 算法适用范围类似的其他算法

/* 1. 有哪些算法跟该算法的适用范围是类似的?2. 该算法与其他类似的算法有什么优势或者劣势? */

3.2.1在图像变换上与DCT变换类似

对于传统的DCT块变换,小波变换具有以下优点: 

  1. 具有熵保持特性,能够有效地改变图像的能量分布,同时不损伤原始图像所包含的信息。
  2. 分解后大部分能量集中在低频子带的少量系数上,而大量的高频子带系数值普遍较小,且存在明显的相关性,有利于获得较高的编码效益。
  3. 小波变换作用于图像的整体,既能去除图像的全局相关性,又可将量化误差分散到整个图像内,避免了方块效应的产生。 
  4. 多级分解后形成的不同分辨率的频率特性的子带信号,便于在失真编码中综合考虑视觉特性,同时有利于图像的渐进传输。

3.2.2图像编码方式对比

  1. 行长编码:擅长于重复数字的压缩。
  1. Huffman编码:擅长于像素个数分布不均匀情况下的编码。
  2. 算术编码:适合分布概率相同的压缩。

可以通过编码数据的特点选择最佳的编码方式。

3.2.3 其他几种嵌入式编码对比

EZW算法是一种基于零树的嵌入式图象编码算法,虽然在小波变换系数中,零树是一个比较有效的表示不重要系数的数据结构,但是,在小波系数中还存在这样的树结构,它的树根是重要的,除树根以外的其它结点是不重要的。对这样的系数结构,零树就不是一种很有效的表示方法。根据基本思想,提出了一种新的且性能更优的实现方法,即基于多级树集合分裂排序(SPIHT)的编码算法。它采用了空间方向树表述系数结构,从而提高编码效率。而SPECKEZW的基础上,利用小波系数分布特点,使得重要的小波系数优先被编码。SPIHTEZW只能等前一棵数编码完毕才能进行下一棵数的编码,误码将影响整个树的结构,SPECK算法块之间可以独立编码,对整个图像还原不造成影响。是近期嵌入式分级图像编码算法中性能较好的一种,其中最主要的操作仅包含对小波系数幅值和阈值的比较判断,因此计算复杂度低,运行效率高,并能达到与 EZWSPIHT 算法相似或更好的编码效率。

附录

yang

zhou

图1 基于像素域的JND变换

JND求解结果灰度图,头发等条纹复杂的JND系数高,平滑区域比较暗,结果合理。

图2 基于小波域的JND变换

SPECK算法(参数可调)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最小可觉察误差(JND)与图像压缩 的相关文章

  • 201409-2 画图

    试题编号 xff1a 201409 2 试题名称 xff1a 画图 时间限制 xff1a 1 0s 内存限制 xff1a 256 0MB 问题描述 xff1a 问题描述 在一个定义了直角坐标系的纸上 xff0c 画一个 x1 y1 到 x2
  • sublime 设置识别语言

    cmd 43 shift 输入语言入 object c 自动跳出 Set Syntax Object C 这样就能识别OC的代码片段了 个人觉得用sublime做代码片段管理比较好
  • vsftp local_umask=022 要不很郁闷的!

    先是最基本的配置 请看我的 etc vsftpd vsftpd conf 接受匿名用户 anonymous enable 61 YES 匿名用户login时不询问口令 no anon password 61 YES 接受本地用户 local
  • CSP202112-2序列查询新解java100分

    问题描述 试题编号 xff1a 202112 2试题名称 xff1a 序列查询新解时间限制 xff1a 1 0s内存限制 xff1a 512 0MB问题描述 xff1a 题目背景 上一题 序列查询 中说道 xff1a A 61 A0 A1
  • 【极速下载】gradle各版本快速下载地址大全

    灰机准备好 xff0c 我就是活雷锋 xff0c 持续更新欢迎 收藏 xff0c 若对您有帮助 xff0c 快来 赏个赞 xff01 如果没有你想要的版本 xff0c 可以留言 版本CSDN下载网盘下载更新时间gradle 8 1 1 al
  • 带括号的表达式求值(参考算法笔记)

    虽然算法原理很简单 xff0c 但是有几个地方需要注意 1 因为左括号是要放入操作符栈中的 xff0c 所以他的优先级要设置为0 xff0c 不然其他运算符来了 xff0c 就不知道能不能放进去 2 栈顶运算符优先级小于op时 xff0c
  • AWS部署方式对比和总结

    Hello大家好 xff0c 我们今天的课时对AWS的部署方式做一个对比和总结 部署方式 对于一个专家级解决方案架构师来说 xff0c 需要有在面对不同的业务需求时 xff0c 采用适合的部署方案的能力 我们前面的课时也讲了很多AWS提供的
  • ECS-弹性容器服务 - Part 1

    67 ECS 弹性容器服务 Part 1 Hello大家好 xff0c 我们今天的课时内容是ECS AWS的弹性容器服务 ECS AWS的弹性容器服务 ECS是高度可扩展的 快速的容器管理和编排服务 使用ECS xff0c 能够将您的Doc
  • Centos7上安装MySQL community步骤

    下载mysql80 community release el7 3 noarch rpm软件源包文件 MySQL Community Yum Repository Downloads shell gt sudo yum localinsta
  • Win10远程桌面账号正确但连接失败的解决方法(使用微软AzureAD的账号)

    百度到的那些改组策略之类的完全没用 xff0c 花了一个小时左右 xff0c 终于在谷歌找到了答案 xff01 https community spiceworks com topic 2048258 logon attempt faile
  • Ubuntu 20.04系统 安装显卡驱动RTX3080

    网络上很多 xff0c 试过很多前人的经验 xff0c 多多少少都有些奇怪问题特别是对于我这样的新手 我记录下 xff0c 仅代表我个人安装成功的经验 说明 xff0c 我是台式机安装Ubuntu 怎么安装完系统就不谈了 xff0c 主要说
  • SerDes---CDR技术

    1 为什么需要CDR 时钟数据恢复主要完成两个工作 xff0c 一个是时钟恢复 xff0c 一个是数据重定时 xff0c 也就是数据的恢复 时钟恢复主要是从接收到的 NRZ xff08 非归零码 xff09 码中将嵌入在数据中的时钟信息提取
  • Failed to start bean ‘documentationPluginsBootstrapper‘

    最近写项目发现导入Swagger2依赖会报错Failed to start bean documentationPluginsBootstrapper 这个错误是由Springfox的一个bug引起 xff0c 解决这个问题的方式有多种 x
  • mac,centos 安装Connector/Python

    mac 官网下载 xff0c 双击 centos https dev mysql com doc connector python en connector python installation source html sudo yum
  • 5个可保存的在线代码片段平台推荐-变成自己的代码词典库

    文章目录 1 谷歌等现代浏览器自带的代码片段2 github gitee gitcode等在线托管平台的gist列表3 各大在线IDE平台4 掘金代码片段5 在线笔记 1 谷歌等现代浏览器自带的代码片段 路径 xff1a 浏览器开发者工具
  • 前置声明与C++头文件互相包含导致的error: 'xxx' does not name a type问题

    在一个源文件中 xff0c 要声明或定义一个类的指针时 xff0c 必须在使用前声明或定义该类 xff0c 因此下面的代码会报错 xff1a span class hljs class span class hljs keyword cla
  • C语言中1<<n是什么意思

    1 lt lt 2 1的二进制为 0000 0001 左移2位 0000 0100 如果再转成10进制就是4
  • 位运算——左移和右移

    lt lt 左移 1 运算规则 xff1a 按二进制形式把所有的数字向左移动对应的位数 xff0c 高位移出 舍弃 xff0c 低位的 空位补零 2 语法格式 xff1a 需要移位的数字 lt lt 移位的次数 例如 xff1a 3 lt
  • 【Python】爬取TapTap原神评论并生成词云分析

    序言 本来是想爬B站的 xff0c 但是B站游戏区的评论好像是动态方式加载 xff0c 分析了一通没搞懂怎么爬 xff0c 所以转到了TapTap xff0c TapTap评论页通过URL来定位 xff0c 非常容易拼接URL去获取想要的页

随机推荐

  • ubuntu下http代理设置

    方法一 这是一种临时的手段 xff0c 如果您仅仅是暂时需要通过http 代理使用apt get xff0c 您可以使用这种方式 在使用apt get 之前 xff0c 在终端中输入以下命令 xff08 根据您的实际情况替换yourprox
  • ARM汇编(基于树莓派3B)3

    第七章 Linux操作系统服务 在第1章 入门 中 xff0c 我们需要能够退出程序并显示字符串 我们使用Raspbian Linux来执行此操作 xff0c 直接调用操作系统服务 在所有高级编程语言中 xff0c 都有一个运行时库 xff
  • VS修改平台工具集

    MSB8020 无法找到 Visual Studio 2010 的生成工具 平台工具集 61 v100 若要使用 v100 生成工具进行生成 xff0c 请安装 Visual Studio 2010 生成工具 或者 xff0c 可以升级到当
  • Web安全领域的探索之远程文件包含漏洞(LFI)

    文件包含渗透 File Inclusion 文件包含漏洞 xff1a 即File Inclusion xff0c 意思是文件包含 xff08 漏洞 xff09 xff0c 是指当服务器开启allow url include选项时 xff0c
  • EFI与MBR启动的区别

    EFI与MBR启动的区别 大硬盘和WIN8系统 xff0c 让我们从传统的BIOS 43 MBR模式升级到UEFI 43 GPT模式 xff0c 现在购买的主流电脑 xff0c 都是预装WIN8系统 xff0c 为了更好的支持2TB硬盘 x
  • mac install MySQL-python

    mac python mysqldb EnvironmentError mysql config not found save brew install mysql 先安装mysql 最后 pip install MySQL Python
  • 每天一个linux命令2---curl命令

    常用参数详解 参数描述 I head只显示传输文档 xff0c 经常用于测试连接本身 o output把输出写到该文件中 xff0c 必须输入保存文件名 O remote name把输出写到该文件中 xff0c 保留远程文件的文件名 F f
  • Linux CentOS7配置iptables端口映射将客户端与另一台主机内的虚拟机服务连接

    这是一篇配置用户主机端口访问Linux服务器内KVM虚拟机的记录文章 各位看官朋友有没有遇到过这种访问情况 自己有一台笔记本电脑A xff0c 还有一台主机B 自己把主机B刷成了linux服务器系统 xff0c 并且在服务器内安装创建了一台
  • Linux内核netfilter子系统ulogd项目性能调优记录

    使用ULOGD打SYSLOG到SYSLOG NG xff0c 当NFLOG拿到的数据包在6K左右时 xff0c CPU有两个核心占了15 左右使用修改过的ULOGD直接打TCP xff0c CPU只有一个核心占15 左右 xff08 修改版
  • LINUX如何设置numlock键开机状态

    第一步 xff1a 安装numlockx xff0c 输入命令 xff1a sudo yum install numlockx 第二步 xff1a 用 vim 打开 etc lightdm lightdm conf文件 xff0c 如果文件
  • Mybatis-plus扩展

    这玩意类似于mp自带的basemapper Copyright c 2011 2020 baomidou jobob 64 qq com lt p gt Licensed under the Apache License Version 2
  • Photoshop中的“磁性套索”背后算法的OpenCV实现

    本文由Markdown语法编辑器编辑完成 1 PS中的磁性套索工具简介 xff1a 本示例是基于Photoshop CS4的工具栏 xff1a 2 磁性套索工具背后的算法Livewire原理 xff1a 3 Livewire Segment
  • 轻量化网络mobileNet与ShuffleNet

    摘要 最近出了一篇旷视科技的孙剑团队出了一篇关于利用Channel Shuffle实现的卷积网络优化 ShuffleNet 我关注了一下 xff0c 原理相当简单 它只是为了解决分组卷积时 xff0c 不同feature maps分组之间的
  • 人脸比对(1:N)

    第 1章 前言 设计出人脸1 xff1a N xff0c 随着N的增大准确率降低最小的解决方案具有很强的现实意义 人脸1 xff1a N的框架大致分为 xff1a 人脸检测 人脸对齐 人脸映射与人脸识别LOSS的设计 xff0c 结构如下图
  • 商家招牌的分类与检测

    现实生活中的招牌各种各样 xff0c 千变万化 针对初赛 xff0c 在现实世界中 xff0c 选取100类常见的招牌信息 xff0c 如肯德基 麦当劳 耐克等 将最终的分类结果上传到比赛平台 数据典型图像 a 样本类别多样性 b 每类样本
  • TensorRT简介--高性能深度学习支持引擎

    上文简单提到了TensorRT的基础与onnx转换 xff1a 基于TensorRT的神经网络推理与加速 xff1a https blog csdn net intflojx article details 81712651 后面看到老板的
  • raspberry install mysql-connector-python

    wget http cdn mysql com Downloads Connector Python mysql connector python 1 0 11 zip unzip mysql connector python 1 0 11
  • ubuntu安装TensorFlow(支持不同版本)

    CUDA 43 CUDNN准备 xff1a 1 安装NVIDIA驱动 xff08 1 xff09 查询NVIDIA驱动 首先去官网 http www nvidia com Download index aspx lang 61 en us
  • 基于变换不变低秩纹理(TILT)的图像校正(附代码)

    原理简介 事实上 xff0c 对于未加旋转的图像 xff0c 由于图像的对称性与自相似性 xff0c 我们可以将其看作是一个带噪声的低秩矩阵 当图像由端正发生旋转时 xff0c 图像的对称性和规律性就会被破坏 xff0c 也就是说各行像素间
  • 最小可觉察误差(JND)与图像压缩

    1 JND算法背景 意义 1算法的概述 最小可觉察误差 JND Just Noticeable Distortion 用于表示人眼不能察觉的最大图像失真 xff0c 体现了人眼对图像改变的容忍度 在图像处理领域 xff0c JND 可以用来