当前位置:网站首页>复盘:图像饱和度计算公式和图像信噪(PSNR)比计算公式
复盘:图像饱和度计算公式和图像信噪(PSNR)比计算公式
2022-08-02 05:01:00 【冰露可乐】
复盘:图像饱和度计算公式和图像信噪(PSNR)比计算公式
提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性
关于互联网大厂的笔试面试,都是需要细心准备的
(1)自己的科研经历,科研内容,学习的相关领域知识,要熟悉熟透了
(2)自己的实习经历,做了什么内容,学习的领域知识,要熟悉熟透了
(3)除了科研,实习之外,平时自己关注的前沿知识,也不要落下,仔细了解,面试官很在乎你是否喜欢追进新科技,跟进创新概念和技术
(4)准备数据结构与算法,有笔试的大厂,第一关就是手撕代码做算法题
面试中,实际上,你准备数据结构与算法时以备不时之需,有足够的信心面对面试官可能问的算法题,很多情况下你的科研经历和实习经历足够跟面试官聊了,就不需要考你算法了。但很多大厂就会面试问你算法题,因此不论为了笔试面试,数据结构与算法必须熟悉熟透了
秋招提前批好多大厂不考笔试,直接面试,能否免笔试去面试,那就看你简历实力有多强了。
基础知识:
【1】SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价
【2】复盘:图像有哪些基本属性?关于图像的知识你知道哪些?图像的参数有哪些
面试官:你知道图像的饱和度计算方法吗?
饱和度计算公式:
Ω=双键数+三键数×2+环数
饱和度可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度。
但由于其和彩度决定的是表现于人眼里的同一个效果,
所以才会出现视彩度与饱和度为同一概念的情况。
可以理解为饱和度虽然表现的东西在人眼中与彩度一致,
但实际是包含着彩度更高一级的单位(饱和度=彩度÷明度)。
高饱和度与低饱和度的区别:
1、色彩鲜艳度的区别
饱和度越高,则色彩越鲜艳;
饱和度偏低,照片整体颜色偏灰白。
2、饱和度过高和过低的区别
过高的饱和度会使画面整体颜色不均匀,给人以失真的视觉感受;
饱和度偏低的话,也很容易给照片整体效果造成不通透的感觉。
没有啥计算公式,就是饱和度S这个维度的调整呗!
看看下面这几个文章就知道
【2】复盘:图像有哪些基本属性?关于图像的知识你知道哪些?图像的参数有哪些
图像饱和度是指图像色彩的纯洁性程度,也称为颜色的鲜艳程度,是“色彩三属性”之一。
我们经常听到浅红色没有深红色颜色红,这种感受就是图像色彩属性的人类最直接感觉。
饱和度取决于该色中含色成分和消色成分的比例,
其中含色成分越大,那么饱和度就越大,
同理,如果消色成分越大,必然饱和度越小。
颜色有RGB,HSV,HLS等多种色彩属性模式,
本次主要比较几种不同方法的颜色饱和度调整效果。
def hsv(cv2_img, S, L, V, MAX):
""" HSV 调整 """
cv2_img = cv2_img.astype(np.float32)
cv2_img = cv2_img / 255.0
HSV = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2HSV)
HSV2 = np.copy(HSV)
HSV2[:, :, 1] = (1.0 + V / float(MAX)) * HSV2[:, :, 1] ## 明度
HSV2[:, :, 1][HSV2[:, :, 1] > 1] = 1
HSV2[:, :, 2] = (1.0 + S / float(MAX)) * HSV2[:, :, 2] ### 饱和度
HSV2[:, :, 2][HSV2[:, :, 2] > 1] = 1
adjImg = cv2.cvtColor(HSV2, cv2.COLOR_HSV2BGR)
adjImg = adjImg * 255.0
adjImg = adjImg.astype(np.uint8)
del cv2_img, HSV, HSV2
return adjImg
def hsl(cv2_img, S, L, V, MAX):
""" HSL 饱和度调整 """
cv2_img = cv2_img.astype(np.float32)
cv2_img = cv2_img / 255.0
HLS = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2HLS)
HLS2 = np.copy(HLS)
HLS2[:, :, 1] = (1.0 + L / float(MAX)) * HLS2[:, :, 1] ## 明度
HLS2[:, :, 1][HLS2[:, :, 1] > 1] = 1
HLS2[:, :, 2] = (1.0 + S / float(MAX)) * HLS2[:, :, 2] ### 饱和度
HLS2[:, :, 2][HLS2[:, :, 2] > 1] = 1
adjImg = cv2.cvtColor(HLS2, cv2.COLOR_HLS2BGR)
adjImg = adjImg * 255.0
adjImg = adjImg.astype(np.uint8)
del cv2_img, HLS, HLS2
return adjImg
def saturationAdjust(cv2_img):
#### 图像颜色饱和度
cv2.namedWindow("SatuAdj", 0)
cv2.createTrackbar('S', 'SatuAdj', 10, 100, callback)
cv2.createTrackbar('V', 'SatuAdj', 10, 100, callback)
cv2.createTrackbar('L', 'SatuAdj', 10, 100, callback)
cv2.createTrackbar('I', 'SatuAdj', -100, 100, callback)
cv2.createTrackbar('Max', 'SatuAdj', 60, 360, callback)
####视图区域
input_img = cv2_img.copy()
while True:
S, V, L, I, MAX = callback(0)
hsv_img = hsv(input_img.copy(), S, L, V, MAX)
hsl_img = hsl(input_img.copy(), S, L, V, MAX)
rgb_img = rgb(input_img.copy(), I)
mat_img = np.hstack((input_img, hsv_img, hsl_img, rgb_img))
text = f"Max:{
MAX},S:{
S}, V:{
V}, L:{
L}"
cv2.putText(mat_img, text, (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1)
cv2.imshow("SatuAdj", mat_img)
cv2.waitKey(1)
HSV图像中的S就是饱和度,改变S值,就能改编饱和度
原始图像:
改变效果1
改变效果2
改变效果3
面试官:你知道图像信噪比(PSNR)计算公式吗?
Peak signal-to-noise ratio (PSNR)
图像峰值信号比。
(1)MSE (Mean Square Error) 描述原图与处理后的图片的均方误差
(2)PSNR的定义是
其中MAXI表示颜色图像的最大数值,
8位采样点则可以得到255。
对于彩色图片,只需要在计算MSE时,三个通道的MSE求均值即可。
记得要将图片转换成float类型后再进行运算,否则,uint8的计算结果是没有负数的
def get_psnr(im1, im2):
im1 = np.asarray(im1, dtype=np.float64)
im2 = np.asarray(im2, dtype=np.float64)
mse = np.mean(np.square(im1 - im2))
return 10. * np.log10(np.square(255.) / mse)
Question: PSNR 仍然是基于MSE的评价,与直接用MSE有和区别?
A:
Question: PSNR原始的评价是对图片压缩带来的图片质量损失,MSE越低,PSNR越高,说明图片压缩损失越低,那么对于图片增强来说,是否PSNR越高就说明增强效果越好呢?
A: 对图像增强来说,无论是否有ground truth,都是PSNR越高效果越好。
不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,
有可能 PSNR 较高者看起来反而比 PSNR 较低者差。
这是因为人眼的视觉对于误差的敏感度并不是绝对的,
其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。
由于PSNR计算量低,已于实现,使用广泛,但是PSNR和人类视觉的主观判断并不容易一致。
SSIM更好一些。也就是说PSNR如果打分好的话,可以用, 打分不好也不要在意。
SSIM是啥?我之前写过:
【1】SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价
总结
提示:重要经验:
1)图像饱和度就是HSV中S,hue是色相:颜色的长相,红橙黄绿青蓝紫;S就是饱和度,调整它,V即Value亮度
2)图像信噪比,是俩图像对比的信噪比,maxi方/MSE的对数
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。
边栏推荐
- go语言中的goroutine(协程)
- UE4 利用Mixamo自动绑骨并导入虚幻4
- canvas 像素操作(图片像素操作)
- Jmeter使用多线程测试web接口
- 元宇宙:活在未来
- navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
- ORA-04044:此处不允许过程、函数、程序包或类型,系统分析与解决
- el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
- MySQL大批量造数据
- Navicat报错:1045-Access denied for user [email protected](using passwordYES)
猜你喜欢
Redis-集群模式(主从复制模式,哨兵模式,集群化模式)
MYSQL 唯一约束
MySQL 8.0.29 set and modify the default password
Google 安装印象笔记剪藏插件
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
Navicat如何连接MySQL
Introduction and use of apifox (1).
2022年100道最新软件测试面试题,常见面试题及答案汇总
apifox介绍及使用(1)。
软件测试分析流程及输出项包括哪些内容?
随机推荐
Go语学习笔记 - grpc serverclient protobuf 从零开始Go语言
合作的小伙伴,缺乏主人翁(owner)意识,好苦恼
MYSQL unique constraint
认识消防报警联网中CAN光纤转换器的光纤接口和配套光纤线缆
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
MySQL如何创建用户
选择黑盒测试用例设计方法的综合策略方案总结
LeetCode刷题系列 -- 787. K 站中转内最便宜的航班
What do interview test engineers usually ask?The test supervisor tells you
canvas 像素操作(图片像素操作)
2022年7月学习计划完成情况
Go语言中定时任务库Cron使用详解
18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
MySQL 8.0.28 version installation and configuration method graphic tutorial
MySQL 8.0.29 set and modify the default password
navicat无法连接mysql超详细处理方法
c语言:查漏补缺(三)
Android studio连接MySQL并完成简单的登录注册功能
12 reasons for MySQL slow query
Redis常见题型