Python(PyTorch)和MATLAB及Rust和C++结构相似度指数测量导图

news2024/11/26 8:58:01

🎯要点

  1. 量化检查图像压缩质量
  2. 低分辨率多光谱和高分辨率图像实现超分辨率分析图像
  3. 质量图像索引/多尺度结构相似度指数和光谱角映射器及视觉信息保真度多种指标
  4. 峰值信噪比和结构相似度指数测量
  5. 结构相似性图像分类
  6. PNG和JPEG图像相似性近似算法
  7. 图像压缩,视频压缩、端到端优化图像压缩、神经图像压缩、GPU变速图像压缩
  8. 手术机器人深度估计算法重建三维可视化
  9. 推理图像超分辨率算法模型
  10. 三维实景实时可微分渲染算法
    在这里插入图片描述

MATLAB结构相似度指数优劣

在本文中假设所有图像均以 sRGB 颜色空间进行编码,即使用指数 ≈ 2.4 \approx 2.4 2.4 进行近似伽马编码。请注意,这意味着假定由本文脚本加载的图像可以直接在屏幕上按原样查看。对于两个图像 A A A B B B,每像素结构相似性指数测量的原始公式由下式给出
SSIM ⁡ ( x , y ) = ( l ( x , y ) ) α ( c ( x , y ) ) β ( s ( x , y ) ) 2 ( 1 ) \operatorname{SSIM}(x, y)=(l(x, y))^\alpha(c(x, y))^\beta(s(x, y))^2\qquad(1) SSIM(x,y)=(l(x,y))α(c(x,y))β(s(x,y))2(1)
其中 A A A B B B 是所有函数的输入,但为了清楚起见省略了。为了计算像素周围补丁的均值、方差和协方差,他们使用这些公式的高斯加权版本,滤波器内核为 11 × 11 11 \times 11 11×11 像素和 σ = 1.5 \sigma=1.5 σ=1.5。亮度分量 l l l 则为
l ( x , y ) = 2 μ A μ B + C 1 μ A 2 + μ B 2 + C 1 ( 2 ) l(x, y)=\frac{2 \mu_{ A } \mu_{ B }+C_1}{\mu_{ A }^2+\mu_{ B }^2+C_1}\qquad(2) l(x,y)=μA2+μB2+C12μAμB+C1(2)
其中平均值 μ A \mu_{ A } μA μ B \mu_{ B } μB 也是 x , y x, y x,y 的函数,例如 μ A ( x , y ) \mu_{ A }(x, y) μA(x,y),但我们跳过 $ (x, y)$ 支持更短的符号,对于方差 σ A 2 \sigma_{ A }^2 σA2 σ B 2 \sigma_{ B }^2 σB2 以及协方差 σ A B \sigma_{ A B } σAB 也是如此。对比分量 c c c
c ( x , y ) = 2 σ A σ B + C 2 σ A 2 + σ B 2 + C 2 ( 3 ) c(x, y)=\frac{2 \sigma_{ A } \sigma_{ B }+C_2}{\sigma_{ A }^2+\sigma_{ B }^2+C_2}\qquad(3) c(x,y)=σA2+σB2+C22σAσB+C2(3)
最后,结构分量 s s s
s ( x , y ) = σ A B + C 3 σ A σ B + C 3 ( 4 ) s(x, y)=\frac{\sigma_{ A B }+C_3}{\sigma_{ A } \sigma_{ B }+C_3}\qquad(4) s(x,y)=σAσB+C3σAB+C3(4)
学者们提出 C 1 = ( K 1 L ) 2 、 C 2 = ( K 2 L ) 2 C_1=\left(K_1 L\right)^2、C_2=\left(K_2 L\right)^2 C1=(K1L)2C2=(K2L)2 C 3 = C 2 / 2 C_3=C_2 / 2 C3=C2/2,其中 L = 255 L=255 L=255 对于 8 位组件图像。此外,他们选择了 K 1 = 0.01 K_1=0.01 K1=0.01 K 2 = 0.03 K_2=0.03 K2=0.03。如果图像的范围是 [ 0 , 1 ] [0,1] [0,1],我们设置 L = 1 L=1 L=1以获得相同的结果,即 C 1 = K 1 2 C_1=K_1^2 C1=K12 C 2 = K 2 2 C_2=K_2^2 C2=K22。最后,在整个图像上汇集的平均 SSIM (MSSIM) 值是
MSSIM ⁡ ( A , B ) = 1 w h ∑ x ∑ y SSIM ⁡ ( x , y ) ( 5 ) \operatorname{MSSIM}( A , B )=\frac{1}{w h} \sum_x \sum_y \operatorname{SSIM}(x, y)\qquad(5) MSSIM(A,B)=wh1xySSIM(x,y)(5)
其中 w w w h h h 是图像的宽度和高度。可以看出, σ A σ B \sigma_{ A } \sigma_{ B } σAσB 项位于方程 3 的分子中,以及方程 4 的分母中。为了创建简化的表达式,建议使用 α = β = γ = 1 \alpha=\beta=\gamma=1 α=β=γ=1 C 3 = C 2 / 2 C_3=C_2 / 2 C3=C2/2,结果是
SSIM ⁡ ( x , y ) = ( 2 μ A μ B + C 1 ) ( 2 σ A B + C 2 ) ( μ A 2 + μ B 2 + C 1 ) ( σ A 2 + σ B 2 + C 2 ) ( 6 ) \operatorname{SSIM}(x, y)=\frac{\left(2 \mu_{ A } \mu_{ B }+C_1\right)\left(2 \sigma_{ A B }+C_2\right)}{\left(\mu_{ A }^2+\mu_{ B }^2+C_1\right)\left(\sigma_{ A }^2+\sigma_{ B }^2+C_2\right)}\qquad(6) SSIM(x,y)=(μA2+μB2+C1)(σA2+σB2+C2)(2μAμB+C1)(2σAB+C2)(6)
以上等从数学角度分析 SSIM 的组成部分。下面将详细讨论质量指数本身的行为。我们使用符号 x / y x / y x/y 来表示特定灰度值的像素。例如,128/255对应灰度值 50.2 % 50.2\% 50.2%。简写形式 x ∣ y x \mid y xy 指定像素大小的棋盘图案,颜色为 x / 255 x / 255 x/255 y / 255 y / 255 y/255。字母 b b b w w w 分别是黑色 ( 0 / 255 ) (0 / 255) (0/255) 和白色 (255/255) 的简写。

图1执行代码:

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
if(isOctave)
   pkg load image; 
end
disp("");
disp("====================");
disp("Results for Figure 1");
disp("--------------------");


srcdir = "teaser/";
dstdir  = "result_images/";
images = ["earthmoon"; "plants"; "i01_l95_tid2013"; "monument_awgn5"; "einstein"; "snow_leaves_contrast3"];

for idx = 1:length(images)
    name = images(idx,:);
    srcfileprefix = strcat(srcdir, name);
    
    A=rgb2gray(imread(convertStringsToChars(strcat(srcfileprefix, '_reference.png'))));
    B=rgb2gray(imread(convertStringsToChars(strcat(srcfileprefix, '_test.png'))));
    [mssim_simplified, mssim, ssim_map_simplified, ssim_map, l_map, c_map, s_map] = ssimlcs(A,B);
    mssim_simplified
    float2grayred(ssim_map, strcat(dstdir, name, '_ssim.png'), 1);
    float2grayred(l_map, convertStringsToChars(strcat(dstdir, name, '_L.png')), 1);
    float2grayred(c_map, convertStringsToChars(strcat(dstdir, name, '_C.png')), 1);
    float2grayred(s_map, convertStringsToChars(strcat(dstdir, name, '_S.png')), 1);
    disp("--------------------");
end
disp("====================");

图2 执行代码

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
if(isOctave)
   pkg load image; 
end
    
disp("");
disp("====================");
disp("Results for Figure 2");
disp("--------------------");

A=imread('gray/gray000.png');
B=imread('gray/gray255.png');
if(isOctave)
  B =B .* 255;  
end
[mssim_simplified, mssim, ssim_map_simplified, ssim_map, l_map, c_map, s_map] = ssimlcs(A,B);
disp("MSSIM between black and white images");
mssim_simplified
float2grayred(ssim_map, 'result_images/luminance_minimum_ssim.png', 1);
float2grayred(l_map, 'result_images/luminance_minimum_L.png', 1);
float2grayred(c_map, 'result_images/luminance_minimum_C.png', 1);
float2grayred(s_map, 'result_images/luminance_minimum_S.png', 1);
disp("--------------------");

A=imread('gray/gray128.png');
B=imread('checker/checker-bw.png');
if(isOctave)
  B =B .* 255;  
end
[mssim_simplified, mssim, ssim_map_simplified, ssim_map, l_map, c_map, s_map] = ssimlcs(A,B);
disp("MSSIM between gray (128/255) and a checkered image (black and white)");
mssim_simplified
float2grayred(ssim_map, 'result_images/contrast_minimum_ssim.png', 1);
float2grayred(l_map, 'result_images/contrast_minimum_L.png', 1);
float2grayred(c_map, 'result_images/contrast_minimum_C.png', 1);
float2grayred(s_map, 'result_images/contrast_minimum_S.png', 1);
disp("--------------------");

A=imread('checker/checker-bw.png');
B=imread('checker/checker-wb.png');
if(isOctave)
  A =A .* 255;  
  B =B .* 255;  
end

[mssim_simplified, mssim, ssim_map_simplified, ssim_map, l_map, c_map, s_map] = ssimlcs(A,B);
disp("MSSIM between gray checker and inverted checkerboard");
mssim_simplified
float2grayred(ssim_map, 'result_images/structure_minimum_ssim.png', 1);
float2grayred(l_map, 'result_images/structure_minimum_L.png', 1);
float2grayred(c_map, 'result_images/structure_minimum_C.png', 1);
float2grayred(s_map, 'result_images/structure_minimum_S.png', 1);
disp("====================");

图4 执行代码

isOctave = exist('OCTAVE_VERSION', 'builtin') ~= 0;
if(isOctave)
    pkg load image;
end
disp("");
disp("====================");
disp("Results for Figure 4");
disp("--------------------");

A=imread('gray/gray253.png');
B=imread('gray/gray255.png');
if(isOctave)
  B =B .* 255;  
end
[mssim, ssim_map] = ssim(A,B);
disp("MSSIM between 253/255 and 255/255: ");
mssim
disp("--------------------");

A=imread('gray/gray128.png');
B=imread('gray/gray130.png');  
[mssim, ssim_map] = ssim(A,B);
disp("MSSIM between 128/255 and 130/255: ");
mssim
disp("--------------------");

A=imread('gray/gray000.png');
B=imread('gray/gray002.png');  
[mssim, ssim_map] = ssim(A,B);
disp("MSSIM between 0/255 and 2/255: ");
mssim
disp("--------------------");

A=imread('gray/gray222.png');
B=imread('gray/gray255.png');
if(isOctave)
  B =B .* 255;  
end
[mssim, ssim_map] = ssim(A,B);
disp("MSSIM between 222/255 and 255/255: ");
mssim
disp("--------------------");

A=imread('gray/gray000.png');
B=imread('gray/gray026.png');
[mssim, ssim_map] = ssim(A,B);
disp("MSSIM between 0/255 and 26/255: ");
mssim

disp("====================");

👉更新:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux服务器中在指定python环境中新建notebook

在指定环境下建立新的IPython内核pip install ipykernel生成ipykernel的配置文件:python -m ipykernel install --user --name netCLR 其中--user是指在用户级别生成,如果没有--user就会在系统中安装,如果不是管理员的话就会没有权限生成&…

【STM32】TIM输入捕获测量电平持续时间

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 测量电平时间思路 配置中断 中断服务函数 捕获完成判断 代码示例 IC.h IC.c main.c 代码参考 前言 阅读本篇博客需了解定时器时基单元,更新中断和输入捕获 定时…

UWB定位系统在智能制造中的应用实践

UWB(Ultra-Wideband,超宽带)定位系统在智能制造中的应用实践已经取得了显著成效。以下是对其应用实践的详细阐述: 一、高精度定位与实时监控 高精度定位:UWB技术以其厘米级甚至毫米级的定位精度,远超传统的GPS和Wi-Fi等定位技术&a…

Endnote 插入参考文献 毕业论文

Endnote使用 1. 使用毕业论文参考文献格式1.1 GBT7714下载1.2 style导入1.3 选择GBT7714 2. 修改参考文献与编号之间的间隔2.1 点击三角2.2 修改Hanging 3. 将引用编号修改为右上角小字3.1 进入Endnote软件,点击Edit-->Output style-->Edit"Chinese Std …

【小鹏汽车用户平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构,旨在通过将网络控制平面从数据转发平面分离出来,从而实现网络的灵活性和可编程性。在SDN中,网络管理员可以通过集中式控制器 来动态管理网络流量&…

了解Redis集群概念,集群如何选举主节点

请给胡广一个免费的三连吗?感谢! 1. Redis集群 1.1 集群概念 Redis主从架构和Redis集群架构是两种不同的概念,大家刚接触Redis时经常弄混淆。胡广给大家贴下Redis官网对两者的解释。 (1)Redis主从架构 Redis主从实…

SpringBatch

Spring Batch Job instance(作业实例) 当作业运行时,会创建一个Job Instance(作业实例),它代表作业的一次逻辑运行,可通过作业名称与作业标识参数进行区分。 比如一个业务需求: 每天定期数据同步,作业名称-daily-sync-…

基于SpringBoot+Vue的考务管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考务管理…

vue 使用jszip,file-saver下载压缩包,自定义文件夹名,文件名打包下载为zip压缩包文件,全局封装公共方法使用。

记录一下后台管理全局封装一个压缩包下载方法,文件夹名自定义,文件名自定义,压缩包名自定义。 安装必要的库 npm install jszip npm install file-saver自定义一个公共方法全局注入 页面使用 /** 下载按钮操作 */handleDownload() {const i…

JAVA智能管理高效运营自营商城系统

智能管理,高效运营 —— 自营商城系统的魅力揭秘🚀 📈 开篇:告别繁琐,拥抱智能管理 你还在为商城运营的繁琐流程头疼吗?🤯 还在为数据分析的复杂性而烦恼吗?🤔 那就让我…

Python设计模式实战:开启软件设计的精进之旅

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

企业工商信息查询-企业工商信息查询接口-企业工商信息api

1、接口介绍 通过企业名称/社会统一信用代码/工商注册号三者其中之一快速查询全国企业工商数据,可查得企业工商基本信息。如:企业工商基本信息,企业法人,经营状态,注册资本,以及股东,高管&#…

[Linux入门]---进程等待

文章目录 1.进程等待必要性1.1什么是进程等待?**1.2为什么需要进程等待? 2.进程等待的方法2.1wait方法2.2waitpid方法2.2.1获取子进程status2.2.2options选项,父进程等待的三种方式 1.进程等待必要性 1.1什么是进程等待?** 通过系统调用wait/waitpid&…

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中的应用前景

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中具有广泛的应用前景。以下是关于这一主题的简要综述: 文章目录 结合LSTM和UKF的背景结合LSTM和UKF的优势应用实例研究现状MATLAB代码示例结合LSTM和UKF的背景 长短期记忆网络(LSTM)是一…

hadoop分布式搭建

hadoop的分布式搭建步骤: 第一步: 比如准备三台虚拟机,分别命名为master、node1、node2,并且确保都配置了java环境 ,都关闭了防火墙,都设置了静态的IP地址,然后三台虚拟机的hosts文件都互相映射&#xff0…

atcoder abc370(dp,基环树/森林,倍增)

A 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {int a, b;cin >> a >> b;if(a 1 && b 0) cout << "Yes" << endl;else if(a 0 && b 1) cout << "No" << en…

【Centos】Centos系统换yum源

【Centos】Linux&#xff0c;Centos系统换yum源 1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak/etc/yum.repos.d/CentOS-Base.repo 是yum的配置文件 /etc/yum.repos.d/CentOS-Base.repo.bak 是我们备份的配置文件 2、下载yum源 这里…

这个开源的AI证件照项目又火了!有人靠它日入300+

今天在知识星球里看到一个球友靠一个AI证件照的项目赚到了第一桶金&#xff0c;看了看项目&#xff0c;还不错。整理下来分享给大家玩玩。 神器名叫HivisionIDPhotos&#xff0c;最近几天一直挂在GitHub热榜上&#xff0c;目前已狂揽3.2K星标。 除了能换背景&#xff0c;它还支…

你绝对想不到,ComfyUI竟然能这样转换线条图!

前言 使用ComfyUI将图像转为线条图&#xff1a;详细教程 在这个数码时代&#xff0c;图像处理技术已经像空气一样渗透进了我们的日常生活。今天&#xff0c;我想和大家分享一个既简单又高效的小妙招——用ComfyUI把图片变成线条图。 不管你是设计师、艺术家&#xff0c;还是…