图像二值化在图像增强中的作用:提升图像对比度与清晰度,打造更清晰的视觉体验
发布时间: 2024-08-09 05:36:23 阅读量: 66 订阅数: 37
![图像二值化在图像增强中的作用:提升图像对比度与清晰度,打造更清晰的视觉体验](https://img-blog.csdnimg.cn/20200411145652163.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM3MDExODEy,size_16,color_FFFFFF,t_70)
# 1. 图像二值化的理论基础
图像二值化是图像处理中一项重要的技术,它将灰度图像转换为二值图像,其中像素值仅为 0(黑色)或 1(白色)。二值化过程涉及将图像中的每个像素与阈值进行比较,如果像素值高于阈值,则将其设置为 1,否则设置为 0。
图像二值化的理论基础建立在灰度图像的直方图之上。直方图显示了图像中每个灰度级的像素数量。阈值的选择决定了二值化图像的二进制表示。较低的阈值将导致更暗的二值化图像,而较高的阈值将导致更亮的二值化图像。
# 2. 图像二值化算法与技术
### 2.1 基本阈值法
基本阈值法是一种简单的图像二值化方法,它将图像中的每个像素与一个阈值进行比较,如果像素值大于阈值,则将其设置为白色(255),否则将其设置为黑色(0)。
#### 2.1.1 固定阈值法
固定阈值法使用一个预定义的阈值来对图像进行二值化。阈值通常是图像中像素值的平均值或中值。
```python
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 计算阈值
threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)[1]
# 显示二值化图像
cv2.imshow('Binary Image', threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**代码逻辑分析:**
* `cv2.threshold()` 函数执行固定阈值法,其中:
* `gray`:输入的灰度图像。
* `127`:预定义的阈值。
* `255`:白色像素值。
* `cv2.THRESH_BINARY`:二值化类型(将像素值大于阈值的设置为白色,否则为黑色)。
* `threshold` 变量存储二值化后的图像。
#### 2.1.2 自适应阈值法
自适应阈值法根据图像的局部特性动态调整阈值。它将图像划分为较小的区域,并为每个区域计算一个局部阈值。
```python
import cv2
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 自适应阈值法
threshold = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# 显示二值化图像
cv2.imshow('Binary Image', threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**代码逻辑分析:**
* `cv2.adaptiveThreshold()` 函数执行自适应阈值法,其中:
* `gray`:输入的灰度图像。
* `255`:白色像素值。
* `cv2.ADAPTIVE_THRESH_MEAN_C`:使用局部平均值作为阈值计算方法。
* `cv2.THRESH_BINARY`:二值化类型(将像素值大于阈值的设置为白色,否则为黑色)。
* `11`:局部区域的尺寸。
* `2`:从局部平均值中减去的常数。
* `threshold` 变量存储二值化后的图像。
### 2.2 聚类阈值法
聚类阈值法将图像中的像素聚类成不同的组,然后根据聚类结果进行二值化。
#### 2.2.1 K-Means算法
K-Means算法是一种聚类算法,它将图像中的像素聚类成 K 个簇。然后,使用簇的平均值作为阈值。
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# K-Means聚类
kmeans = cv2.kmeans(gray.reshape(-1, 1), 2)[1].flatten()
# 计算阈值
threshold = np.mean(kmeans)
# 二值化图像
binary = (gray > threshold) * 255
# 显示二值化图像
cv2.imshow('Binary Image', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**代码逻辑分析:**
* `cv2.kmeans()` 函数执行 K-Means 聚类,其中:
* `gray.reshape(-1, 1)`:将灰度图像转换为一维数组。
* `2`:聚类簇的数量。
* `kmeans` 变量存储聚类结果,`flatten()` 方法将其展平为一维数组。
* `threshold` 变量计算聚类结果的平均值作为阈值。
* `binary` 变量存储二值化后的图像。
#### 2.2.2 模糊C均值算法
模糊C均值算法是一种软聚类算法,它允许像素同时属于多个簇。然后,使用每个像素的簇隶属度来计算阈值。
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 模糊C均值聚类
fcm = cv2.fuzzy.FCM(gray, 2)
# 计算阈值
threshold = np.dot(fcm.centers, fcm.u.max(axis=0))
# 二值化图像
binary = (gray > threshold) * 255
# 显示二值化图像
cv2.imshow('Binary Image', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
**代码逻辑分析:**
* `cv2.fuzzy.FCM()`
0
0