将彩色图像分为黑白两个部分,定义了两个变量k1和k2,分别赋值为rate和0.5。然后使用rand(width, height)函数随机生成矩阵,由于rand函数生成的元素都在0-1之间,所以再比较该矩阵中的每个元素是否小于k1或k2,如果小于则将该元素赋值为1,反之则赋值为0,最终得到两个二值化的矩阵a1和a2。在矩阵中分为R、G、B三个通道为图像添加噪声,最后再将三个通道合在一起,如
时间: 2023-11-22 13:52:46 浏览: 49
彩色图像的二值化处理
4星 · 用户满意度95%
下所示的代码实现:
```python
import numpy as np
from PIL import Image
def add_noise(image, rate):
# 将彩色图像分为黑白两个部分
k1 = rate
k2 = 0.5
img = image.convert('RGB')
img_array = np.array(img)
gray = np.dot(img_array[..., :3], [0.299, 0.587, 0.114])
# 生成二值化矩阵
rand_matrix = np.random.rand(*gray.shape)
a1 = np.where(rand_matrix < k1, 1, 0)
a2 = np.where(rand_matrix < k2, 1, 0)
# 添加噪声
noise1 = np.random.rand(*img_array.shape)
noise2 = np.random.rand(*img_array.shape)
img_array1 = np.where(a1[..., np.newaxis], img_array, img_array + noise1)
img_array2 = np.where(a2[..., np.newaxis], img_array, img_array + noise2)
# 合并三个通道
img1 = Image.fromarray(np.uint8(img_array1))
img2 = Image.fromarray(np.uint8(img_array2))
img_merge = Image.merge('RGB', (img1.split()[0], img2.split()[1], img1.split()[2]))
return img_merge
```
其中,rate为控制黑白分界线的参数,可以自行设定。可以通过调用该函数来对图像进行噪声处理,示例如下:
```python
# 打开图像文件
image = Image.open('example.jpg')
# 添加噪声
noisy_image = add_noise(image, rate=0.5)
# 显示图像
noisy_image.show()
```
阅读全文