在这个代码基础上增加以下内容:import torchimport pandas as pdimport matplotlibpyplot as pltfrom torchutilsdata import Dataset DataLoader# 定义Fashion-MNIST数据集类class FashionMNISTDatasetDataset def __init__self csv_f
二值化
import numpy as np
定义二值化函数
def binary(img, threshold): img[img>=threshold] = 1 img[img<threshold] = 0 return img
选择10张图像进行二值化
for i, (images, labels) in enumerate(test_dataloader): if i == 0: for j in range(10): # 将图像转换成numpy数组 img = np.array(images[j].reshape(28, 28)) # 二值化处理 img_binary = binary(img, 0.5) # 绘制原图像和二值化后的图像 fig, axs = plt.subplots(1, 2, figsize=(5, 2)) axs[0].imshow(img, cmap='gray') axs[0].set_title("Original") axs[1].imshow(img_binary, cmap='gray') axs[1].set_title("Binary") plt.show()
边缘检测
import cv2
定义边缘检测函数
def edge_detection(img): # 定义卷积核 kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) # 卷积操作 img_edge = cv2.filter2D(img, -1, kernel) return img_edge
选择10张图像进行边缘检测
for i, (images, labels) in enumerate(test_dataloader): if i == 0: for j in range(10): # 将图像转换成numpy数组 img = np.array(images[j].reshape(28, 28)) # 二值化处理 img_binary = binary(img, 0.5) # 边缘检测处理 img_edge = edge_detection(img_binary) # 绘制原图像和边缘检测后的图像 fig, axs = plt.subplots(1, 2, figsize=(5, 2)) axs[0].imshow(img_binary, cmap='gray') axs[0].set_title("Binary") axs[1].imshow(img_edge, cmap='gray') axs[1].set_title("Edge Detection") plt.show()
降分辨率
import torch.nn.functional as F
选择一张图像进行分辨率降低
for i, (images, labels) in enumerate(test_dataloader): if i == 0: # 将图像转换成numpy数组 img = np.array(images[0].reshape(28, 28)) # 转换成tensor img_tensor = torch.tensor(img, dtype=torch.float32).unsqueeze(0).unsqueeze(0) # 分辨率降低 img_downsampled = F.max_pool2d(img_tensor, kernel_size=2, stride=2) # 将tensor转换成numpy数组 img_downsampled = np.array(img_downsampled.squeeze()) # 绘制原图像和降低分辨率后的图像 fig, axs = plt.subplots(1, 2, figsize=(5, 2)) axs[0].imshow(img, cmap='gray') axs[0].set_title("Original") axs[1].imshow(img_downsampled, cmap='gray') axs[1].set_title("Downsampled") plt.show()
升分辨率
选择一张图像进行分辨率提高
for i, (images, labels) in enumerate(test_dataloader): if i == 0: # 将图像转换成numpy数组 img = np.array(images[0].reshape(28, 28)) # 转换成tensor img_tensor = torch.tensor(img, dtype=torch.float32).unsqueeze(0).unsqueeze(0) # 分辨率提高 img_upsampled = F.interpolate(img_tensor, scale_factor=2, mode='nearest') # 将tensor转换成numpy数组 img_upsampled = np.array(img_upsampled.squeeze()) # 绘制原图像和提高分辨率后的图像 fig, axs = plt.subplots(1, 2, figsize=(5, 2)) axs[0].imshow(img, cmap='gray') axs[0].set_title("Original") axs[1].imshow(img_upsampled, cmap='gray') axs[1].set_title("Upsampled") plt.show()
旋转与翻转
选择一张图像进行旋转和翻转
for i, (images, labels) in enumerate(test_dataloader): if i == 0: # 将图像转换成numpy数组 img = np.array(images[0].reshape(28, 28)) # 旋转 img_rotate90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) img_rotate180 = cv2.rotate(img, cv2.ROTATE_180) img_rotate270 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE) # 翻转 img_flip_ud = np.flipud(img) img_flip_lr = np.fliplr(img) # 绘制原图像和旋转翻转后的图像 fig, axs = plt.subplots(2, 3, figsize=(6, 4)) axs[0][0].imshow(img, cmap='gray') axs[0][0].set_title("Original") axs[0][1].imshow(img_rotate90, cmap='gray') axs[0][1].set_title("Rotate 90") axs[0][2].imshow(img_rotate180, cmap='gray') axs[0][2].set_title("Rotate 180") axs[1][0].imshow(img_rotate270, cmap='gray') axs[1][0].set_title("Rotate 270") axs[1][1].imshow(img_flip_ud, cmap='gray') axs[1][1].set_title("Flip Up-Down") axs[1][2].imshow(img_flip_lr, cmap='gray') axs[1][2].set_title("Flip Left-Right") plt.show(
原文地址: https://www.cveoy.top/t/topic/dxkl 著作权归作者所有。请勿转载和采集!