【基础】图像的灰度化与二值化处理
发布时间: 2024-05-21 17:35:07 阅读量: 76 订阅数: 213
# 2.1 灰度化处理算法的实现
图像灰度化处理算法主要有以下几种:
**2.1.1 平均值法**
平均值法是最简单的灰度化处理算法,其原理是将图像中每个像素点的颜色值替换为该像素点周围所有像素点的平均值。平均值法的计算公式如下:
```python
gray_value = (sum(pixel_values) / num_pixels)
```
其中,`gray_value`为灰度值,`pixel_values`为像素点的颜色值列表,`num_pixels`为像素点的数量。
**2.1.2 加权平均法**
加权平均法与平均值法类似,但它对不同的像素点赋予不同的权重。权重通常根据像素点的距离或其他因素来确定。加权平均法的计算公式如下:
```python
gray_value = (sum(weight * pixel_value) / sum(weight))
```
其中,`weight`为权重列表,`pixel_value`为像素点的颜色值列表。
# 2. 图像灰度化处理的实践应用
### 2.1 灰度化处理算法的实现
#### 2.1.1 平均值法
平均值法是最简单的灰度化算法,它将图像中每个像素的灰度值设置为该像素周围所有像素灰度值的平均值。
```python
import cv2
import numpy as np
def grayscale_mean(image):
"""
平均值法灰度化处理
Args:
image: 输入的彩色图像
Returns:
gray_image: 灰度化后的图像
"""
# 获取图像的宽高
height, width = image.shape[:2]
# 创建一个灰度图像
gray_image = np.zeros((height, width), dtype=np.uint8)
# 遍历每个像素
for i in range(height):
for j in range(width):
# 获取像素周围的 3x3 邻域
neighborhood = image[i-1:i+2, j-1:j+2]
# 计算像素周围的平均灰度值
mean_value = np.mean(neighborhood)
# 设置像素的灰度值
gray_image[i, j] = mean_value
return gray_image
```
**逻辑分析:**
1. `grayscale_mean` 函数接收一个彩色图像作为输入,并返回一个灰度化后的图像。
2. 它首先获取图像的宽高,然后创建一个灰度图像。
3. 然后,它遍历图像中的每个像素,并获取像素周围的 3x3 邻域。
4. 接下来,它计算像素周围的平均灰度值,并将其设置为像素的灰度值。
5. 最后,它返回灰度化后的图像。
#### 2.1.2 加权平均法
加权平均法是一种改进的灰度化算法,它将像素周围不同像素的灰度值赋予不同的权重。权重通常根据像素与中心像素的距离来分配。
```python
import cv2
import numpy as np
def grayscale_weighted_mean(image):
"""
加权平均法灰度化处理
Args:
image: 输入的彩色图像
Returns:
gray_image: 灰度化后的图像
"""
# 获取图像的宽高
height, width = image.shape[:2]
# 创建一个灰度图像
gray_image = np.zeros((height, width), dtype=np.uint8)
# 定义权重矩阵
weights = np.array([[1, 2, 1],
[2, 4, 2],
[1, 2, 1]])
# 遍历每个像素
for i in range(height):
for j in range(width):
# 获取像素周围的 3x3 邻域
neighborhood = image[i-1:i+2, j-1:j+2]
# 计算像素周围的加权平均灰度值
weighted_mean_value = np.sum(neighborhood * weights) / np.sum(weights)
# 设置像素的灰度值
gray_image[i, j] = weighted_mean_value
return gray_image
```
**逻辑分析:**
1. `grayscale_weighted_mean` 函数接收一个彩色图像作为输入,并返回一个灰度化后的图像。
2. 它首先获取图像的宽高,然后创建一个灰度图像。
3. 接下来,它定义了一个权重矩阵,该矩阵用于给像素周围不同像素的灰度值赋予不同的权重。
4. 然后,它遍历图像中的每个像素,并获取像素周围的 3x3 邻域。
5. 接下来,它计算像素周围的加权平均灰度值,并将其设置为像素的灰度值。
6. 最后,它返回灰度化后的图像。
### 2.2 灰度化处理的图像增强
#### 2.2.1 直方图均衡化
直方图均衡化是一种图像增强技术,它通过调整图像的直方图来提高图像的对比度。它将图像的灰度值重新分布,使得每个灰度值出现的频率更加均匀。
```python
import cv2
import numpy as np
def histogram_equalization(image):
"""
直方图均衡化图像增强
Args:
image: 输入的灰度图像
Returns:
enhanced_image: 直方图均衡化后的图像
"""
# 计算图像的直方图
histogram = cv2.calcHist([image], [0], None, [256], [0, 256])
# 计算累积直方图
cdf = np.cumsum(histogram)
# 归一化累积直方图
cdf_normalized = cdf / cdf[-1]
# 创建一个映射表
map_table = np.zeros(256, dtype=np.uint8)
for i in range(256):
map_table[i] = np.round(cdf_normalized[i] * 255)
# 应用映射表
enhanced_image = cv2.LUT(image, map_table)
return enhanced_image
```
**逻辑分析:**
1. `histogram_equalization` 函数接收一个灰度图像作为输入,并返回一个直方图均衡化后的图像。
2. 它首先计算图像的直方图,然后计算累积直方图。
3. 接下来,它归一化累积直方图,并创建一个映射表。
4. 然后,它
0
0