前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像的线性变换和非线性变换

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

作者头像
北山啦
发布2022-10-31 11:38:36
1.2K0
发布2022-10-31 11:38:36
举报
文章被收录于专栏:北山啦的博客

图像的线性变换和非线性变换,逐像素运算就是对图像的没一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。这个转换可以由函数表示:

s = f( r )

其中r为原来的像素值,s为新的像素值,通常采用的函数了单调函数进行变换。

线性变换:

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

其中c和k均为常数

非线性变换

s=a+\frac {ln(r+1)} {blnc}

其中a,b,c为常数

Gamma变换:

s = cr^γ

其中c为常数,通常取1,γ也为常数,r的范围为[0,255],通常会放缩到[0,1]

在这里插入图片描述
在这里插入图片描述

图为γ取不同值时的情况,例如,当原图像的像素值为0.2时,γ=1.5时,现图像的像素值小于0.2,γ=1时,现图像的像素值等于0.2.当γ=0.5时,现图像的像素值大于0.4.

代码语言:javascript
复制
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

对于不同灰度图和彩色图像,利用不同方式展 示,定义show()函数

代码语言:javascript
复制
def show(img):
    if img.ndim == 2:
        plt.imshow(img, cmap='gray',vmin=0,vmax=255)
    else:
        plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))#cv用的BGR,需要转换为RGB
    plt.show()

读取图片

代码语言:javascript
复制
img = cv.imread("./pic/cat500x480.jpg",0) #0表示读为灰度图
show(img)
在这里插入图片描述
在这里插入图片描述
  1. 线性变换
代码语言:javascript
复制
b = 20
k = 2
img2 = b + k * img.astype(np.int32) #img的类型为uint8,线性变换后,像素值会循环
img2 = np.clip(img2,0,255) #利用np.clip来截断
show(img2)
在这里插入图片描述
在这里插入图片描述

np.clip是一个截取函数,用于截取数组中小于或者大于某值的部分,并使得被截取部分等于固定值。

也可以内置函数cv.convertScaleAbs实现

代码语言:javascript
复制
alpha = 2
beta = 20
img3 = cv.convertScaleAbs(img, alpha=alpha, beta=beta)#利用内置函数来截断
show(img3)
  1. 非线性变换
代码语言:javascript
复制
img4 = 10 + np.log(img.astype(np.float32)+1)/ 0.1
show(img4)
在这里插入图片描述
在这里插入图片描述
  1. Gama变换
代码语言:javascript
复制
img01 = img / 255
img05 = np.power(img01,0.5)*255
img15 = np.power(img01,1.5)*255
show(np.hstack([img05,img,img15]))
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档