图像增强
常见图像增强的代码效果合辑。
前言
图像增强,对图像的边缘局部信息进行加强,增强图像的对比度、亮度等方式,提高图像的特征。
一、图像分段增强
代码如下(示例):
# -- 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()
结果如下(示例):
总结
以上就是今天要讲的内容,本文仅仅简单介绍了图像增强代码,简单效果。