题目:
若一幅5*5图像的图像数据如图(a)所示,试求图(a)所示的图像经灰度变换函数:
所示的灰度变换函数进行灰度变换处理后的结果。
(a)图像5*5数据如下:
0,10,20,30,40,
50,60,70,80,90,
100,110,120,130,140,
150,160,170,180,190,
200,210,220,230,240
原理:
通过将原图像的k值带入灰度变换函数中去,而求得E(k)即为新图像的图像数据。
代码:
import numpy as np
# 原始图像数据
image = np.array([
[0, 10, 20, 30, 40],
[50, 60, 70, 80, 90],
[100, 110, 120, 130, 140],
[150, 160, 170, 180, 190],
[200, 210, 220, 230, 240]
])
# 定义灰度变换函数
def E(k):
if 0 <= k <= 100:
return 50
elif 100 < k <= 200:
return 1.5 * k - 100
elif 200 < k <= 250:
return k
else:
return k # 如果k超出范围, 返回原值
# 应用灰度变换函数处理图像数据,使用了NumPy的vectorize函数来将定义的灰度变换函数E应用于整个图像矩阵image。这样做的目的是将处理函数应用于矩阵中的每个元素,而不需要显式地编写循环。vectorize函数返回一个新的向量化函数,该函数可以接受一个数组(或者是类似数组的对象),并将函数应用于其中的每个元素。
transformed_image = np.vectorize(E)(image)
# 输出处理前的图像数据
print('处理前图像数据:')
print(image)
# 输出处理后的图像数据
print('处理后图像数据:')
print(transformed_image)
运行结果:
将数据结果转换为图像数据部分代码:
import numpy as np
import matplotlib.pyplot as plt
# 原始图像数据
image = np.array([
[0, 10, 20, 30, 40],
[50, 60, 70, 80, 90],
[100, 110, 120, 130, 140],
[150, 160, 170, 180, 190],
[200, 210, 220, 230, 240]
])
# 定义灰度变换函数
def E(k):
if 0 <= k <= 100:
return 50
elif 100 < k <= 200:
return 1.5 * k - 100
elif 200 < k <= 250:
return k
else:
return k # 如果k超出范围, 返回原值
# 应用灰度变换函数处理图像数据
transformed_image = np.vectorize(E)(image)
# 显示处理前的图像数据Original Image
plt.figure(figsize=(6, 4))
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')
# 显示处理后的图像数据Transformed Image
plt.subplot(1, 2, 2)
plt.imshow(transformed_image, cmap='gray')
plt.title('Transformed Image')
plt.axis('off')
plt.tight_layout()
plt.show()
运行结果:
对于运行结果的分析:
根据提供的原始图像数据和经过处理后的图像数据,我们可以进行以下分析:
1.原始图像数据:
原始图像数据是一个5x5的矩阵,包含了一些灰度值,范围从0到240,代表了不同的亮度级别
2.处理后图像数据:
处理后的图像数据经过了灰度变换函数E
的处理,该函数根据输入的灰度值返回一个新的灰度值。
根据灰度变换函数的定义:
对于灰度值在0到100之间的像素,新的灰度值设为50。
对于灰度值在100到200之间的像素,新的灰度值按照线性变换1.5 * k - 100计算得到。
对于灰度值在200到250之间的像素,新的灰度值保持不变。
经过处理后,原始图像中灰度值小于100的像素都变成了50,灰度值大于等于100且小于等于200的像素经过线性变换得到了不同的新灰度值,而灰度值大于200的像素则保持不变。
由于处理函数的定义,一些像素值在原图中被映射到了相同的值,因此可能会出现某些区域看起来相同的情况。
综上所述,处理后的图像数据中,灰度值在0到100之间的像素都变成了50,而灰度值在100到200之间的像素经过线性变换得到了不同的新灰度值,而灰度值大于200的像素则保持不变。