python图像灰度变换

二值化

非0元素取1法

非零元素取一法是最基础的二值化算法。顾名思义,非零取一就是对于灰度图像f,若某像素灰度值为零,则其灰度值不变,仍为零;对于灰度值不为零的像素,将其像素值全部变为255。
在这里插入图片描述

img = np.zeros((w, h), dtype=np.uint8)
	for j in range(h):
	    for i in range(w):
	        if grey[j, i] != 0:
	            img[j, i] = 255
固定阀值法

固定阀值法就是为灰度图像f设定一个阀值T,把灰度值小于给定阈值T的像素置为0,大于阈值T的像素置为255,从而对灰度图像实现二值化变换。
在这里插入图片描述

img = np.zeros((w, h), dtype=np.uint8)
	for j in range(h):
	    for i in range(w):
	        if grey[j, i] > 125:
	            img[j, i] = 255
双固定阀值法

双固定阀值法预先设置了两个阀值T1和T2,T1<T2,当对图像进行处理时,如果某个像素的灰度值小于T1则置0(或者255);如果大于T1并且小于T2时,则置255(或者置0);如果大于T2时,则置0(或者255)。
在这里插入图片描述

img = np.zeros((w, h), dtype=np.uint8)
for j in range(h):
    for i in range(w):
        if grey[j, i] > 125 and grey[j, i] < 200:
            img[j, i] = 255

灰度变换

反色变换处理
img = np.zeros((w, h), dtype=np.uint8)
for j in range(h):
    for i in range(w):
        img[j, i] = 255 - grey[j, i]

在这里插入图片描述

窗口变换处理

当图像中大部分像素的灰度级在[L,U]范围内,少部分像素分布在小于L和大于U的区间内时,可用两端“截取式”的变换使小于灰度级L和大于等于灰度级U的像素强行压缩为0和255。这种变换叫灰度的窗口变换。

img = np.zeros((w, h), dtype=np.uint8)
for j in range(h):
    for i in range(w):
        if grey[j, i] < 50:
            img[j, i] = 0
        elif grey[j, i] > 180:
            img[j, i] = 255
        else:
            img[j, i] = grey[j, i]

在这里插入图片描述

分段线性变换

将图像灰度区间分成两段乃至多段,分别做线性变换称之为分段线性变换。它的灰度变换函数 如图所示,函数表达式如下:  在这里插入图片描述
在这里插入图片描述

img = np.zeros((w, h), dtype=np.uint8)
x1 = 130
y1 = 50
x2 = 150
y2 = 200
bMap = [0]*256
# 灰度映射
for i in range(256):
    if i <= x1:
        if x1 > 0:
            bMap[i] = int(y1 * i / x1)
        else:
            bMap[i] = 0
    elif i > x1 and i <= x2:
        if x2 != x1:
            bMap[i] = y1 + int((y2 - y1) * (i - x1) / (x2 - x1))
        else:
            bMap[i] = y1
    elif i < 256:
        if (x2 != 255):
            bMap[i] = y2 + int((255 - y2) * (i - x2) / (255 - x2))
        else:
            bMap[i] = 255
for j in range(h):
    for i in range(w):
        img[j, i] = bMap[grey[j, i]]
对数变换

在这里插入图片描述

dTemp=math.log(i+1)/0.025+10
if dTemp>255:
	dTemp=255
elif dTemp<0:
	dTemp=0
幂次变换

在这里插入图片描述

dTemp = 1.0*math.pow(i/255.0,1.7) +20
if dTemp > 255:
    dTemp = 255
elif dTemp < 0:
    dTemp = 0

直方图

直方图

表示图像中具有某种灰度级的像素的个数,反映了图像中每种灰度出现的频率。它是图像最基本的统计特征。
横坐标:灰度级;
纵坐标:该灰度级出现的个数。
在这里插入图片描述

def hist(self, img):
    list = np.zeros(256, dtype=np.float32)
    if len(img.shape) == 3:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    H, W = img.shape
    for y in range(H):
        for x in range(W):
            temp = img[y, x]
            list[temp] = list[temp] + 1
    return list
直方图均衡化

直方图均衡方法的基本思想是对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减,从而达到清晰图像的目的。通过点运算使输入图像转换为在每一灰度级上都有相同的像素点的数目,即输出图像的直方图是平的。这对于在进行图像比较和分割之前将图像转化为一致的格式是十分有益的。
理论参考 https://blog.csdn.net/imxlw00/article/details/116020150

def hist_equal(self,img, z_max=255):
    H, W = img.shape
    S = H * W  * 1.

    out = img.copy()

    sum_h = 0.

    for i in range(1, 255):
        ind = np.where(img == i)
        sum_h += len(img[ind])
        z_prime = z_max / S * sum_h
        out[ind] = z_prime

    out = out.astype(np.uint8)

    return out

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值