图像增强篇

图像增强

常见图像增强的代码效果合辑。



前言

图像增强,对图像的边缘局部信息进行加强,增强图像的对比度、亮度等方式,提高图像的特征。


一、图像分段增强

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行分段增强
#实现:
'''
1、非线性
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
import cv2  
import numpy as np  
import matplotlib.pyplot as plt
 
#读取原始图像
img = cv2.imread('./bilateral.jpg')
 
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
 
#创建一幅图像
result = np.zeros((height, width), np.uint8)
 
#图像灰度非线性变换:DB=DA×DA/255
for i in range(height):
    for j in range(width):
        gray = int(grayImage[i,j])*int(grayImage[i,j]) / 255
        result[i,j] = np.uint8(gray)
 
#显示图像
plt.rcParams['font.sans-serif']=['SimHei']       #坐标图像中显示中文
plt.rcParams['axes.unicode_minus']=False

plt.figure(figsize=(6,8))    #设置大小
plt.subplot(121)
plt.imshow(img,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("原始图像")
plt.subplot(122)
plt.imshow(result,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("分段增强")
plt.show()

结果如下(示例):

在这里插入图片描述

二、伽马变换

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行伽马变换
#实现:
'''
1、
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
import numpy as np
import matplotlib.pyplot as plt
import cv2
 
#绘制曲线
def gamma_plot(c, v):
    x = np.arange(0, 256, 0.01)
    y = c*x**v
    plt.plot(x, y, 'r', linewidth=1)
    plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
    plt.title(u'伽马变换函数')
    plt.xlim([0, 255]), plt.ylim([0, 255])
    plt.show()
 
#伽玛变换
def gamma(img, c, v):
    lut = np.zeros(256, dtype=np.float32)
    for i in range(256):
        lut[i] = c * i ** v
    output_img = cv2.LUT(img, lut) #像素灰度值的映射
    output_img = np.uint8(output_img+0.5)  
    return output_img
 
#读取原始图像
img = cv2.imread('./8.jpg',0)
# cv2.imwrite('yuantu.jpg',img) 
#绘制伽玛变换曲线
gamma_plot(0.00000005, 4.0)
 
#图像灰度伽玛变换
output = gamma(img, 0.00000005, 4.0)
 
#显示图像
plt.figure(figsize=(6,8))    #设置大小
plt.subplot(121)
plt.imshow(img,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("原始图像")
plt.subplot(122)
plt.imshow(output,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("对数变换")
plt.show()

结果如下(示例):
在这里插入图片描述
在这里插入图片描述

三、Log变换

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行log变换
#实现:
'''
1、
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import cv2
 
#绘制曲线
def log_plot(c):
    x = np.arange(0, 256, 0.01)
    y = c * np.log(1 + x)
    plt.plot(x, y, 'r', linewidth=1)
    plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
    plt.title(u'对数变换函数')
    plt.xlim(0, 255), plt.ylim(0, 255)
    plt.show()
 
#对数变换
def log(c, img):
    output = c * np.log(1.0 + img)
    output = np.uint8(output + 0.5)
    return output
 
#读取原始图像
img = cv2.imread('./8.jpg',0)
 
#绘制对数变换曲线
log_plot(24)
 
#图像灰度对数变换
output = log(24, img)
# cv2.imwrite('log.jpg',output)
 
#显示图像
plt.rcParams['font.sans-serif']=['SimHei']       #坐标图像中显示中文
plt.rcParams['axes.unicode_minus']=False

plt.figure(figsize=(6,8))    #设置大小
plt.subplot(121)
plt.imshow(img,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("原始图像")
plt.subplot(122)
plt.imshow(output,cmap=plt.cm.gray,vmin=0,vmax=255),plt.axis("off"),plt.title("对数变换")
plt.show()

结果如下(示例):
在这里插入图片描述
在这里插入图片描述

四、拉普拉斯变换

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行laplace
#实现:
'''
1、
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
import cv2
import numpy as np

def img_transform():
    img = cv2.imread('./8.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    kernel = np.array((
        [0, 1, 0],
        [1, -4, 1],
        [0, 1, 0]), dtype="float32")

    dst1 = cv2.filter2D(gray, -1, kernel)  # 实现的效果同dst2一样
    dst2 = cv2.Laplacian(gray, -1, ksize=1)  # ksize=1,表示用3x3的拉普拉斯算子模板
    dst3 = cv2.Laplacian(gray, -1, ksize=3)  # ksize=3,用Sobel操作(目前没有用Sobel复现)

    result1 = np.hstack((gray, dst1))
    result2 = np.hstack((dst3, dst2))
    result = np.vstack((result1, result2))
    
    cv2.namedWindow('result', 0)
    cv2.imshow('result', result1)

    cv2.waitKey(0)

if __name__ == '__main__':
    img_transform()

结果如下(示例):
在这里插入图片描述


五、直方图均衡化

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行直方图均衡化
#实现:
'''
1、
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
import cv2 as cv
import matplotlib.pyplot as plt

#读取图片
img = cv.imread('./8.jpg')
 
#灰度转换
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

# 2.均衡化处理
dst = cv.equalizeHist(gray)

#存储
# cv.imwrite("zhifangtujunhenghua.jpg",dst)

# 3.计算原图和均衡化后的直方图
cul_img = cv.calcHist([gray], [0], None, [256], [0, 256])
cul_dis = cv.calcHist([dst], [0], None, [256], [0, 256])

# 3.结果展示
plt.rcParams['font.sans-serif'] = ['SimHei']
fig, axex = plt.subplots(nrows=2, ncols=2, figsize=[10, 8], dpi=100)
plt.subplot(221)
plt.imshow(img, cmap=plt.cm.gray)
plt.title("原图")
plt.subplot(222)
plt.imshow(dst, cmap=plt.cm.gray)
plt.title("均衡化的结果")
axex[1][0].plot(cul_img)
axex[1][0].grid()
axex[1][1].plot(cul_dis)
axex[1][1].grid()
plt.show()

结果如下(示例):
在这里插入图片描述

六、自适应直方图均衡化

代码如下(示例):

# -- coding: utf-8 --**
#作者:dfl
#描述:python建立灰度图像,对图像进行自适应直方图均衡化
#实现:
'''
1、
'''
#日志:
'''
1、2023年04月08日建立程序
'''
#bug报告:
'''
1、
'''
#导入库
import cv2 
import matplotlib.pyplot as plt


#读取图片
img = cv2.imread('./8.jpg',0)

# 2.创建一个自适应均衡化对象,并应用于图像
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
cl1 = clahe.apply(img)

#保存
cv2.imwrite("zhishiying.jpg",cl1)
# 3.计算原图和均衡化后的直方图
cul_img = cv2.calcHist([img], [0], None, [256], [0, 255])
cul_cl1 = cv2.calcHist([cl1], [0], None, [256], [0, 255])

# 3.图像展示
plt.rcParams['font.sans-serif'] = ['SimHei']
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8), dpi=100)
axes[0][0].imshow(img, cmap=plt.cm.gray)
axes[0][0].set_title("原图")
axes[0][1].imshow(cl1, cmap=plt.cm.gray)
axes[0][1].set_title("自适应均衡化后的结果")
axes[1][0].plot(cul_img)
axes[1][0].grid()
axes[1][1].plot(cul_cl1)
axes[1][1].grid()
plt.show()

结果如下(示例):
在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了图像增强代码,简单效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值