灰度变换(反转,对数,伽马)的python实现

这是学习第三章的时候的灰度变换的知识,就是找一个函数对原图像的每个像素点的灰度值重新计算,得到一个新得图像。
1. 图像反转
一幅图像的灰度级范围为[0,L-1],那么反转函数是 s = L-1-r (原来黑的变亮,亮的变黑)

from skimage import io
import numpy as np

img = io.imread('11.jpg',as_gray = True)
rows,cols = img.shape
max1 = img.max()

emptyImage = np.zeros((rows,cols))

for i in range(rows):
    for j in range(cols):
        emptyImage[i,j] = max1 - img[i,j]

print(emptyImage.max(),emptyImage.min())

io.imshow(emptyImage)
io.show()

2. 对数变换
对数变换 s = c*log(1+r) c是常数
该变换将输入中范围较窄的诋灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出中范围较窄的灰度值,我们使用这种类型的变换来扩展图像的暗像素,同时压缩更高灰度级的值。反对数变换的作用与此相反。
在这里插入图片描述

from skimage import io,data
import numpy as np
import math

def function(img,c):
    rows,cols,dims = img.shape
    emptyImage = np.zeros((rows,cols,dims),np.uint8)
    max1 = img.max()
    print(max1)

    for m in range(dims):
        for i in range(rows):
            for j in range(cols):
                
                r = img[i,j,m]
                #重新量化
                emptyImage[i,j,m] = ((c*math.log(1 + r) - c*math.log(1 + 0))/\
                                    (c*math.log(1 + max1) - c*math.log(1 + 0))) * max1
                
               
    return emptyImage
                
if __name__ == '__main__':

    img = io.imread('11.jpg')
    result = function(img,1)
    io.imshow(result)
    io.show()

3. 伽马变换
在这里插入图片描述
c和γ为正常数,对于不同的γ将产生不同的效果
在这里插入图片描述

from skimage import io,data
import numpy as np
import math

def function(img,c,gamma):

    rows,cols,dims = img.shape
    emptyImage = np.zeros((rows,cols,dims),np.uint8)
    max1 = img.max()
    for m in range(dims):
         for i in range(rows):
             for j in range(cols):

                 r = img[i,j,m]

                 emptyImage[i,j,m] = math.pow(r/max1,gamma)*max1
                 
    return emptyImage
                                  
if __name__ == '__main__':
    img = io.imread('11.jpg')
    result = function(img,1,1.5)
    io.imshow(result)
    io.show()

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值