Python图像的线性变换和非线性变换

举报
北山啦 发表于 2022/09/07 11:04:50 2022/09/07
【摘要】 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图像的线性变换和非线性变换
在这里插入图片描述
逐像素运算就是对图像的没一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。这个转换可以由函数表示:
s = f ( r ) s = f( r )
其中r为原来的像素值,s为新的像素值,通常采用的函数了单调函数进行变换。

线性变换:

s ( x , y ) = c + k r ( x , y ) s(x,y) =c+kr(x,y)

非线性变换

s = a + l n ( r + 1 ) b l n c s=a+\frac {ln(r+1)} {blnc}

其中a,b,c为常数。

Gamma变换:

s = c r s = cr

代码实现:

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。