Улучшение изображений с помощью цветового дрожания: подробное руководство

В современный век цифровых технологий методы улучшения изображений играют решающую роль в улучшении визуальной эстетики и привлечении внимания зрителя. Одним из таких методов является дрожание цвета. Цветовое дрожание добавляет тонкие вариации цветам изображения, что приводит к более яркому и динамичному визуальному восприятию. В этой статье мы рассмотрим несколько методов добавления дрожания цвета к изображению, сопровождаемые примерами кода. Если вы фотограф, графический дизайнер или просто энтузиаст, желающий улучшить свои изображения, это руководство поможет вам!

Методы добавления дрожания цвета к изображениям:

  1. Использование Python и OpenCV:
    Пример кода:

    import cv2
    import numpy as np
    def color_jitter(image, jitter_strength):
       hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
       h, s, v = cv2.split(hsv_image)
       h_jitter = np.random.uniform(-jitter_strength, jitter_strength, h.shape)
       s_jitter = np.random.uniform(-jitter_strength, jitter_strength, s.shape)
       v_jitter = np.random.uniform(-jitter_strength, jitter_strength, v.shape)
       h = np.clip(h + h_jitter, 0, 255).astype(np.uint8)
       s = np.clip(s + s_jitter, 0, 255).astype(np.uint8)
       v = np.clip(v + v_jitter, 0, 255).astype(np.uint8)
       jittered_hsv = cv2.merge([h, s, v])
       jittered_image = cv2.cvtColor(jittered_hsv, cv2.COLOR_HSV2BGR)
       return jittered_image
    # Usage
    original_image = cv2.imread('image.jpg')
    jitter_strength = 20  # Adjust the strength of jitter as per your preference
    jittered_image = color_jitter(original_image, jitter_strength)
  2. Использование Python и PIL (библиотеки изображений Python):
    Пример кода:

    from PIL import Image
    import numpy as np
    def color_jitter(image, jitter_strength):
       image_array = np.array(image)
       jitter = np.random.uniform(-jitter_strength, jitter_strength, size=image_array.shape)
       jittered_image_array = np.clip(image_array + jitter, 0, 255).astype(np.uint8)
       jittered_image = Image.fromarray(jittered_image_array)
       return jittered_image
    # Usage
    original_image = Image.open('image.jpg')
    jitter_strength = 20  # Adjust the strength of jitter as per your preference
    jittered_image = color_jitter(original_image, jitter_strength)
  3. Использование глубокого обучения и переноса стилей:
    Пример кода:

    import torch
    import torchvision.transforms as transforms
    from torchvision.models import vgg19
    from torchvision.utils import save_image
    def color_jitter(image, jitter_strength):
       device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
       # Preprocess the image
       preprocess = transforms.Compose([
           transforms.Resize(256),
           transforms.ToTensor(),
           transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
       ])
       image_tensor = preprocess(image).unsqueeze(0).to(device)
       # Load pre-trained VGG19 model
       model = vgg19(pretrained=True).features.to(device).eval()
       # Apply style transfer to introduce color jitter
       with torch.no_grad():
           jittered_image = model(image_tensor)
           jittered_image = jittered_image * jitter_strength + image_tensor * (1 - jitter_strength)
       jittered_image = jittered_image.squeeze(0).cpu()
       jittered_image = transforms.ToPILImage()(jittered_image)
       return jittered_image
    # Usage
    original_image = Image.open('image.jpg')
    jitter_strength = 0.2  # Adjust the strength of jitter as per your preference
    jittered_image = color_jitter(original_image, jitter_strength)