# Transform
## ToTensor and 0~1
```
from torchvision import transforms
to_tensor = transforms.ToTensor()
img_tensor = to_tensor(img)
plt.imshow(img_tensor.squeeze(0), cmap='gray')
plt.title("ToTensor (0~1)")
plt.axis('off')
plt.show()
```
```
img_tensor
```
## Resize
```
resize = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor()
])
resized_tensor = resize(img)
plt.imshow(resized_tensor.squeeze(0), cmap='gray')
plt.title("Resize to 224x224")
plt.axis('off')
plt.show()
```
## Normalize
```
normalize = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5], std=[0.5])
])
norm_tensor = normalize(img)
plt.imshow(norm_tensor.squeeze(0), cmap='gray')
plt.title("Normalize [-1, 1]")
plt.axis('off')
plt.show()
```
## Random rotaion
```
rotate = transforms.Compose([
transforms.RandomRotation(degrees=20),
transforms.ToTensor()
])
rotated_tensor = rotate(img)
plt.imshow(rotated_tensor.squeeze(0), cmap='gray')
plt.title("Random Rotation ±20°")
plt.axis('off')
plt.show()
```
## Random horizontal flip
```
flip = transforms.Compose([
transforms.RandomHorizontalFlip(p=1.0),
transforms.ToTensor()
])
flipped_tensor = flip(img)
plt.imshow(flipped_tensor.squeeze(0), cmap='gray')
plt.title("Horizontal Flip")
plt.axis('off')
plt.show()
```
## Random vertical flip
```
vertical_flip = transforms.Compose([
transforms.RandomVerticalFlip(p=1.0), # 強制垂直翻轉
transforms.ToTensor()
])
vflipped_tensor = vertical_flip(img)
plt.imshow(vflipped_tensor.squeeze(0), cmap='gray')
plt.title("Vertical Flip")
plt.axis('off')
plt.show()
```
## ColorJitter
```
color_jitter = transforms.Compose([
transforms.ColorJitter(brightness=0.5, contrast=0.5),
transforms.ToTensor()
])
jittered_tensor = color_jitter(img)
plt.imshow(jittered_tensor.squeeze(0), cmap='gray')
plt.title("ColorJitter: Brightness & Contrast")
plt.axis('off')
plt.show()
```
## Gaussian blur
```
gaussian_blur = transforms.Compose([
transforms.GaussianBlur(kernel_size=5, sigma=(0.1, 2.0)),
transforms.ToTensor()
])
blurred_tensor = gaussian_blur(img)
plt.imshow(blurred_tensor.squeeze(0), cmap='gray')
plt.title("Gaussian Blur")
plt.axis('off')
plt.show()
```
## Random crop
```
random_crop = transforms.Compose([
transforms.RandomCrop((100, 100)),
transforms.ToTensor()
])
cropped_tensor = random_crop(img)
plt.imshow(cropped_tensor.squeeze(0), cmap='gray')
plt.title("Random Crop 100x100")
plt.axis('off')
plt.show()
```
## Elastic transform
```
from torchvision import transforms
import matplotlib.pyplot as plt
from PIL import Image
img = Image.open("train/XR_FINGER/patient00169/study1_negative/image1.png").convert("L")
img_rgb = img.convert("RGB")
elastic = transforms.Compose([
transforms.ElasticTransform(alpha=250.0),
transforms.ToTensor()
])
elastic_tensor = elastic(img_rgb)
plt.imshow(elastic_tensor.permute(1, 2, 0))
plt.title("Elastic Transform")
plt.axis('off')
plt.show()
```
## Random perspective
```
perspective = transforms.Compose([
transforms.RandomPerspective(distortion_scale=0.5, p=1.0),
transforms.ToTensor()
])
perspective_tensor = perspective(img)
plt.imshow(perspective_tensor.squeeze(0), cmap='gray')
plt.title("Random Perspective")
plt.axis('off')
plt.show()
```
## Random erasing
```
erasin = transforms.Compose([
RandomErasing(p=1.0, scale=(0.05, 0.2), ratio=(0.3, 3.3))
transforms.ToTensor()
])
erasin_tensor = perspective(img)
plt.imshow(erased_tensor.squeeze(0), cmap='gray')
plt.title("Random Erasing")
plt.axis('off')
plt.show()
```
## Add gaussian Noise
```
import torch
class AddGaussianNoise:
def __init__(self, mean=0., std=0.05):
self.mean = mean
self.std = std
def __call__(self, tensor):
return tensor + torch.randn_like(tensor) * self.std + self.mean
noise_pipeline = transforms.Compose([
transforms.ToTensor(),
AddGaussianNoise(std=0.1)
])
noisy_tensor = noise_pipeline(img)
plt.imshow(noisy_tensor.squeeze(0).clamp(0, 1), cmap='gray')
plt.title("Gaussian Noise")
plt.axis('off')
plt.show()
```
## Assembled Transform
```
from torchvision import transforms
import torch
import matplotlib.pyplot as plt
from PIL import Image
import random
img = Image.open("train/XR_FINGER/patient00169/study1_negative/image1.png").convert("L")
transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.RandomHorizontalFlip(p=0.5),
transforms.RandomRotation(degrees=10),
transforms.ColorJitter(brightness=0.2, contrast=0.2),
transforms.ToTensor(),
])
augmented_tensor = transform(img)
plt.imshow(augmented_tensor.squeeze(0).clamp(0, 1), cmap='gray')
plt.title("")
plt.axis('off')
plt.show()
```