图像增强是一种提高图像质量和信息量的技术,常用于图像处理、计算机视觉和机器学习中。常见的图像增强方法包括直方图均衡化、高斯滤波、锐化、对比度拉伸、图像平滑、图像锐化、图像滤波、图像金字塔等。
以下是一些常见的图像增强方法的示例代码,使用Halcon和Python实现。
1. 直方图均衡化
图像的灰度直方图就描述了图像中灰度分布情况, 能够很直观的展示出图像中各个灰度级1所占的多少。图像的灰度直方图是灰度级的函数, 描述的是图像中具有该灰度级的像素的个数: 其中, 横坐标是灰度级, 纵坐标是该灰度级出现的率。
直方图的性质:
① 直方图反映了图像中的灰度分布规律。 它描述每个灰度级具有的像素个数, 但不包含这些像素在图像中的位置信息。 图像直方图不关心像素所处的空间位置, 因此不受图像旋转和平移变化的影响, 可以作为图像的特征。
② 任何一幅特定的图像都有唯一的直方图与之对应, 但不同的图像可以有相同的直方图。
③如果一幅图像有两个不相连的区域组成, 并且每个区域的直方图已知, 则整幅图像的直方图是该两个区域的直方图之和。
Halcon代码:
* 使用全局直方图均衡化
gen_histogram_equalizer (HistogramEqualizer, 'image', 0, 255, 70)
* 使用局部直方图均衡化
gen_histogram_equalizer (HistogramEqualizer2, 'image', 0, 255, 70)
* 全局和局部直方图均衡化的区别在于映射函数的不同,全局映射函数将图像所有像素映射到整个像素空间,而局部映射函数将图像的每个子区域映射到像素空间。
Python代码
import cv2
import numpy as np
def histogram_equalizer(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
channels = cv2.split(gray)
for channel in channels:
hist = cv2.calcHist([channel], [0, 1], None, [256], [0, 256])
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX, -1)
gray = cv2.merge(channels)
return cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
image = cv2.imread('image.jpg')
equalized_image = histogram_equalizer(image)
cv2.imshow('Equalized image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像均衡化DEMO
import cv2
import numpy as np
def gray_to_intensity(image):
h, w, c = image.shape
intensity = np.zeros((h, w, c))
for row in range(h):
for col in range(w):
intensity[row, col, 0] = image[row, col, 0]
intensity[row, col, 1] = image[row, col, 1]
intensity[row, col, 2] = image[row, col, 2]
return intensity
def