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()