在cv2中,CLAHE代码
时间: 2024-03-10 19:48:18 浏览: 14
在OpenCV中,使用CLAHE算法对图像进行直方图均衡化的代码如下:
```python
import cv2
# 读入图像
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# 创建CLAHE对象并设置参数
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
# 对图像进行直方图均衡化
img_clahe = clahe.apply(img)
# 显示结果
cv2.imshow('input', img)
cv2.imshow('output', img_clahe)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.imread()`用于读入图像,`cv2.createCLAHE()`用于创建CLAHE对象并设置参数,`clahe.apply()`用于对图像进行直方图均衡化。最后,使用`cv2.imshow()`来显示原始图像和均衡化后的图像,`cv2.waitKey()`用于等待用户按下键盘,`cv2.destroyAllWindows()`用于关闭所有窗口。
你可以根据需要修改参数,例如`clipLimit`用于限制对比度增强的程度,`tileGridSize`用于设置像素块的大小。
相关问题
将灰度图像进行CLAHE代码
下面是将灰度图像进行CLAHE的Python代码:
```python
import cv2
# 读取灰度图像
img = cv2.imread('your_image_path', cv2.IMREAD_GRAYSCALE)
# 创建CLAHE对象并进行直方图均衡化
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
img_clahe = clahe.apply(img)
# 显示原始图像和CLAHE之后的图像
cv2.imshow('Original Image', img)
cv2.imshow('CLAHE Image', img_clahe)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,cv2.createCLAHE()函数用于创建CLAHE对象,可以指定clipLimit参数和tileGridSize参数来调整直方图均衡化的效果。apply()函数用于对图像进行CLAHE操作。最后使用cv2.imshow()函数显示原始图像和CLAHE之后的图像。
AHE和CLAHE代码实现
AHE(自适应直方图均衡化)和CLAHE(对比度受限的自适应直方图均衡化)是两种图像增强技术。以下是Python中实现AHE和CLAHE的示例代码:
AHE代码实现:
```python
import cv2
import numpy as np
def ahe(img, clip_limit=2.0, tile_size=8):
"""自适应直方图均衡化"""
h, w = img.shape
img_eq = np.zeros((h, w), dtype=np.uint8)
for i in range(0, h, tile_size):
for j in range(0, w, tile_size):
# 获取当前块
block = img[i:i+tile_size, j:j+tile_size]
# 计算当前块的直方图
hist, _ = np.histogram(block.flatten(), bins=256, range=(0, 255))
# 计算累积直方图
cdf = hist.cumsum()
cdf = (cdf - cdf.min()) / (tile_size * tile_size - cdf.min())
# clip limit
cdf = np.clip(cdf, 0, clip_limit)
# 直方图均衡化
block_eq = np.interp(block.flatten(), np.arange(256), cdf * 255).astype(np.uint8)
# 将均衡化后的块放回原图
img_eq[i:i+tile_size, j:j+tile_size] = block_eq.reshape((tile_size, tile_size))
return img_eq
```
CLAHE代码实现:
```python
def clahe(img, clip_limit=2.0, tile_size=8):
"""对比度受限的自适应直方图均衡化"""
h, w = img.shape
img_eq = np.zeros((h, w), dtype=np.uint8)
for i in range(0, h, tile_size):
for j in range(0, w, tile_size):
# 获取当前块
block = img[i:i+tile_size, j:j+tile_size]
# 计算当前块的直方图
hist, _ = np.histogram(block.flatten(), bins=256, range=(0, 255))
# 计算累积直方图
cdf = hist.cumsum()
cdf = (cdf - cdf.min()) / (tile_size * tile_size - cdf.min())
# clip limit
cdf = np.clip(cdf, 0, clip_limit)
# 直方图均衡化
block_eq = np.interp(block.flatten(), np.arange(256), cdf * 255).astype(np.uint8)
# 将均衡化后的块放回原图
img_eq[i:i+tile_size, j:j+tile_size] = block_eq.reshape((tile_size, tile_size))
# 计算全局直方图
hist, _ = np.histogram(img_eq.flatten(), bins=256, range=(0, 255))
# clip limit
cdf = hist.cumsum()
cdf = (cdf - cdf.min()) / (h * w - cdf.min())
cdf = np.clip(cdf, 0, clip_limit)
# 直方图均衡化
img_eq = np.interp(img_eq.flatten(), np.arange(256), cdf * 255).astype(np.uint8)
img_eq = img_eq.reshape((h, w))
return img_eq
```
以上代码中,`clip_limit`表示对比度限制因子,`tile_size`表示块的大小。在AHE中,每个块的直方图是独立计算的,而在CLAHE中,每个块的直方图都受到全局直方图的约束。