Python图像的线性变换和非线性变换
【摘要】 Python图像的线性变换和非线性变换逐像素运算就是对图像的没一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。这个转换可以由函数表示:s=f(r)s = f( r )s=f(r)其中r为原来的像素值,s为新的像素值,通常采用的函数了单调函数进行变换。线性变换:s(x,y)=c+kr(x,y)s(x,y) =c+kr(x,y)s(x,y)=c+kr(x,y)非线性变换:s=a+ln(...
Python图像的线性变换和非线性变换
逐像素运算就是对图像的没一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。这个转换可以由函数表示:
其中r为原来的像素值,s为新的像素值,通常采用的函数了单调函数进行变换。
线性变换
:
非线性变换
:
其中a,b,c为常数。
Gamma变换
:
代码实现:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 封装图片显示函数
def image_show(image):
if image.ndim == 2:
plt.imshow(image, cmap='gray')
else:
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()
if __name__ == '__main__':
# 读取灰度图像
img_lenna = cv.imread('./pic/cat500x480.jpg', 0)
# 线性变换
alpha = 2 # 斜率参数
beta = 20 # 偏置参数
img_linear = cv.convertScaleAbs(img_lenna, alpha=alpha, beta=beta)
image_show(img_linear)
# 非线性变换
para1 = 10 # 非线性参数1
para2 = 0.1 # 非线性参数2
img_nonlinear = para1 + np.log(np.float32(img_lenna) + 1) / para2
img_nonlinear = np.clip(img_nonlinear, 0, 255)
image_show(img_nonlinear)
# 非线性变换(gamma变换)
gamma = 1.2 # 指数参数
img_nonlinear = np.power(img_lenna, gamma)
img_nonlinear = np.clip(img_nonlinear, 0, 255)
image_show(img_nonlinear)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)