侧边栏壁纸
  • 累计撰写 49 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

灰度变换

Administrator
2024-08-23 / 0 评论 / 0 点赞 / 10 阅读 / 4257 字
温馨提示:
本文最后更新于 2024-08-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

灰度变换

反色变换

import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'

#读取RGB图像并转换为灰度图像
image = cv2.cvtColor(cv2.imread('Lena.bmp'), cv2.COLOR_BGR2GRAY)

#对图像进行反色变换
inverted_image = 255 - image

# 显示原始图像和反色变换后的图像
fig, axes = plt.subplots(1, 2)
axes[0].imshow(image, cmap='gray')
axes[0].set_title('原图')
axes[1].imshow(inverted_image, cmap='gray')
axes[1].set_title('反色变换')
plt.show()

对数变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'

#读取RGB图像并转换为灰度图像
image = cv2.imread('Lena.bmp', 0)

#对数变换
c = 1.0  #对数变换常数
log_transformed = c * np.log(1 + image)
# 转换为整数类型(0-255)
log_transformed = np.uint8(log_transformed)

fig, axes = plt.subplots(1, 2)
axes[0].imshow(image, cmap='gray')
axes[0].set_title('原图')
axes[1].imshow(log_transformed, cmap='gray')
axes[1].set_title('对数变换')
plt.show()

伽马变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'

#读取灰度图像
image = cv2.imread('Lena.bmp', 0)

#伽马变换
gamma = 2  #伽马值
gamma_transformed = np.power(image / 255.0, gamma) * 255.0
# 转换为整数类型(0-255)
gamma_transformed = np.uint8(gamma_transformed)

fig, axes = plt.subplots(1, 2)
axes[0].imshow(image, cmap='gray')
axes[0].set_title('原图')
axes[1].imshow(gamma_transformed, cmap='gray')
axes[1].set_title('伽马变换')
plt.show()

分段线性变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'

#读取图像
image = cv2.imread('Lena.bmp', 0)

#分段线性变换参数
x_min = 50
x_max = 200
# 分段线性变换函数
def piecewise_linear_transform(pixel_value):
    if pixel_value < x_min:
        return 0
    elif pixel_value > x_max:
        return 255
    else:
        return 255 * (pixel_value - x_min) / (x_max - x_min)

#对图像进行分段线性变换
transformed_image = np.vectorize(piecewise_linear_transform)(image)

#计算原始图像的直方图
hist_original, _ = np.histogram(image.flatten(), bins=256, range=[0, 256])
#计算变换后图像的直方图
hist_transformed, _ = np.histogram(transformed_image.flatten(), bins=256, range=[0, 256])

fig, axes = plt.subplots(2, 2, figsize=(10, 10))
axes[0, 0].imshow(image, cmap='gray')
axes[0, 0].set_title('原始图像')
axes[0, 1].imshow(transformed_image, cmap='gray')
axes[0, 1].set_title('分段线性变换')
axes[1, 0].bar(range(256), hist_original, color='gray', alpha=0.7)
axes[1, 0].set_title('原始图像直方图')
axes[1, 0].set_xlabel('灰度值')
axes[1, 0].set_ylabel('像素数量')
axes[1, 1].bar(range(256), hist_transformed, color='gray', alpha=0.7)
axes[1, 1].set_title('分段线性变换直方图')
axes[1, 1].set_xlabel('灰度值')
axes[1, 1].set_ylabel('像素数量')
plt.show()

直方图均衡化

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'

#读取图像
image = cv2.imread('Lena.bmp', 0)

#进行直方图均衡化
equalized_image = cv2.equalizeHist(image)

#计算原始图像的直方图
hist_original, _ = np.histogram(image.flatten(), bins=256, range=[0, 256])
#计算均衡化后图像的直方图
hist_equalized, _ = np.histogram(equalized_image.flatten(), bins=256, range=[0, 256])

fig, axes = plt.subplots(2, 2, figsize=(10, 10))
axes[0, 0].imshow(image, cmap='gray')
axes[0, 0].set_title('原始图像')
axes[0, 1].imshow(equalized_image, cmap='gray')
axes[0, 1].set_title('直方图均衡化')
axes[1, 0].bar(range(256), hist_original, color='gray', alpha=0.7)
axes[1, 0].set_title('原始图像直方图')
axes[1, 0].set_xlabel('灰度值')
axes[1, 0].set_ylabel('像素数量')
axes[1, 1].bar(range(256), hist_equalized, color='gray', alpha=0.7)
axes[1, 1].set_title('直方图均衡化直方图')
axes[1, 1].set_xlabel('灰度值')
axes[1, 1].set_ylabel('像素数量')
plt.show()
0

评论区