Python之实验一 数字图像基本操作及灰度调整

本文介绍了如何使用Python的skimage库进行图像处理,包括图像的采样模拟、量化、基本算术操作(如加减)以及图像直方图和直方图均衡化的示例。
摘要由CSDN通过智能技术生成

Python之胡编乱造

(一)使用skimage实现图像模拟

from skimage import data
from matplotlib import pyplot as plt
import numpy as np  # 导入所需类包

# 载入测试图像
image = data.coffee()  # 载入测试图像

# 设置采样比率
ratio = 20
image1 = np.zeros((int(image.shape[0] / ratio), int(image.shape[1] / ratio), image.shape[2]), dtype='int32')

# 对图像进行遍历
for i in range(image1.shape[0]):
    for j in range(image1.shape[1]):
        for k in range(image1.shape[2]):
            # 获取需要采样的图像块
            delta = image[i * ratio:(i + 1) * ratio, j * ratio:(j + 1) * ratio, k]
            # 计算均值,并存入结果图像
            image1[i, j, k] = np.mean(delta)

# 创建一个图像布局,包含两个子图
plt.figure(figsize=(10, 5))

# 显示原始图像
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('Original Image')
plt.axis('on')  # 确保坐标轴显示

# 显示采样后的图像
plt.subplot(1, 2, 2)
plt.imshow(image1)
plt.title('Sampled Image')
plt.axis('on')  # 确保坐标轴显示

# 显示图像
plt.tight_layout()
plt.show()

(二)使用skimage实现图像量化

from skimage import data
from matplotlib import pyplot as plt

# 载入测试图像
image = data.coffee()  # 载入测试图像

# 设置量化比率
ratio = 128

# 创建一个图像布局,包含两个子图
fig, axes = plt.subplots(1, 2, figsize=(10, 5))

# 显示原始图像
axes[0].imshow(image)
axes[0].set_title('Original Image')
axes[0].axis('on')  # 确保坐标轴显示

# 对图像进行量化
quantized_image = (image // ratio) * ratio

# 显示量化后的图像
axes[1].imshow(quantized_image)
axes[1].set_title('Quantized Image')
axes[1].axis('on')  # 确保坐标轴显示

# 调整子图间距
plt.tight_layout()

# 显示图像
plt.show()

(三)使用skimage实现图像算术

from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:windows\fonts\simsun.ttc", size=12)

from skimage import data
from matplotlib import pyplot as plt

moon = data.moon()
camera = data.camera()
images_minus = moon - camera
images_plus = moon + camera

plt.subplot(2, 2, 1)
plt.title('月亮图像', fontproperties=font_set)
plt.imshow(moon, cmap='gray')
plt.colorbar()

plt.subplot(2, 2, 2)
plt.title('摄影师图像', fontproperties=font_set)
plt.imshow(camera, cmap='gray')
plt.colorbar()

plt.subplot(2, 2, 3)
plt.title('月亮加摄影师图像', fontproperties=font_set)
plt.imshow(images_plus, cmap='gray')
plt.colorbar()

plt.subplot(2, 2, 4)
plt.title('月亮减摄影师图像', fontproperties=font_set)
plt.imshow(images_minus, cmap='gray')
plt.colorbar()

plt.show()

(四)编写python代码,使用skimage实现图像点运算

from skimage import data, exposure
from matplotlib import pyplot as plt
import matplotlib.font_manager as font_manager

# 设置中文字体
font_set = font_manager.FontProperties(fname=r"c:windows\fonts\simsun.ttc", size=12)

# 读入图像
images = data.coffee()

# 分别计算gamma=0.2,0.67,2.5时的图像
image_1 = exposure.adjust_gamma(images, 0.2)
image_2 = exposure.adjust_gamma(images, 0.67)
image_3 = exposure.adjust_gamma(images, 2.5)

# 分别展示原图及结果图像
plt.subplot(2, 2, 1)
plt.title('gamma=1', fontproperties=font_set)
plt.imshow(images)
plt.axis('off')

plt.subplot(2, 2, 2)
plt.title('gamma=0.2', fontproperties=font_set)
plt.imshow(image_1)
plt.axis('off')

plt.subplot(2, 2, 3)
plt.title('gamma=0.67', fontproperties=font_set)
plt.imshow(image_2)
plt.axis('off')

plt.subplot(2, 2, 4)
plt.title('gamma=2.5', fontproperties=font_set)
plt.imshow(image_3)
plt.axis('off')

plt.show()

(五)编写python代码,使用skimage实现图像直方图和直方图均衡化

from skimage import data, exposure
import matplotlib.pyplot as plt
import numpy as np

# 读取图像
img = data.moon()

# 创建直方图的figure
plt.figure("hist", figsize=(8, 8))

# 原始图像及其直方图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')  # 使用cmap='gray'
plt.axis('off')
arr = img.flatten()  # 将图像转换为一维数组
plt.subplot(2, 2, 2)
plt.hist(arr, bins=256, density=True, edgecolor='None', facecolor='red')

# 均衡化图像及其直方图
img1 = exposure.equalize_hist(img)
arr1 = img1.flatten()  # 将均衡化后的图像转换为一维数组
plt.subplot(2, 2, 3)
plt.imshow(img1, cmap='gray')  # 使用cmap='gray'
plt.axis('off')
plt.subplot(2, 2, 4)
plt.hist(arr1, bins=256, density=True, edgecolor='None', facecolor='red')

# 显示图像
plt.show()

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值