图像的灰度变换

题目:

若一幅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的像素则保持不变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值