用Numpy实现的CLAHE函数,输入是彩图,不要用cv2.createCLAHE!!!
时间: 2024-05-16 08:15:19 浏览: 68
好的,我可以给你提供一个用Numpy实现的CLAHE函数。
首先,我们需要将彩色图像转换为灰度图像。可以使用以下代码:
```python
import numpy as np
def rgb2gray(rgb):
return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
gray = rgb2gray(image)
```
接下来,我们需要计算直方图,并进行归一化处理。可以使用以下代码:
```python
def histeq(gray, n_bins=256, clip_limit=0.01):
hist, bins = np.histogram(gray, bins=n_bins, range=[0, 255])
cdf = hist.cumsum()
cdf = (cdf - cdf.min()) / (cdf.max() - cdf.min())
cdf = (cdf * (n_bins - 1)).astype('int')
# Clip limit
clip = clip_limit * n_bins / 2
cdf = np.maximum(cdf - clip, 0)
cdf = np.minimum(cdf, n_bins - 1 - clip)
# Interpolation
bins = np.arange(n_bins)
lookup = np.interp(bins, cdf, bins)
# Apply lookup table
eq = lookup[gray.astype('int')]
return eq.astype('uint8')
```
最后,我们需要将灰度图像转换回彩色图像。可以使用以下代码:
```python
def gray2rgb(gray, image):
rgb = np.zeros_like(image)
rgb[..., 0] = gray
rgb[..., 1] = gray
rgb[..., 2] = gray
return rgb
```
将上述函数组合起来,就可以得到一个用Numpy实现的CLAHE函数了:
```python
def clahe(image, n_bins=256, clip_limit=0.01):
# Convert to grayscale
gray = rgb2gray(image)
# Apply histogram equalization
eq = histeq(gray, n_bins, clip_limit)
# Convert back to RGB
rgb = gray2rgb(eq, image)
return rgb
```
希望这个函数能够帮到你!
阅读全文