Добавление цифрового шума к изображениям на языке D

Добавление цифрового шума к изображениям на языке D

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

Основной код

Для начала нам потребуется библиотека для работы с изображениями. В языке D существует библиотека dlib, которая предоставляет основные функции для манипуляции изображениями. Давайте начнем с простого примера добавления гауссовского шума.

Алгоритм добавления шума

Гауссов шум добавляет к каждому пикселю случайное значение, распределенное по нормальному закону. Вот как это можно сделать на языке D:

import std.stdio;
import std.random;
import std.math;
import std.conv;
import std.range;
import std.algorithm;
import dlib;

void addGaussianNoise(SuperImage img, double mean, double stddev) {
    auto rnd = Random(unpredictableSeed);
    Color4f pixel;
    foreach (y; 0 .. img.height) {
        foreach (x; 0 .. img.width) {        
            pixel = img.opIndex(x, y);            
            auto noise_int = cast(int)(mean + stddev * uniform01(rnd));
            float noise = noise_int / 255.0f;
            pixel[0] = min(pixel[0] + noise, 1.0f);
            pixel[1] = min(pixel[1] + noise, 1.0f);
            pixel[2] = min(pixel[2] + noise, 1.0f);
            img.opIndexAssign(pixel, x, y);
            // return;
        }
    }
}

void main() {
    auto img = loadImage("input_photo.png");    
    addGaussianNoise(img, 0.0f, 50.0f);
    savePNG(img, "noise_photo.png");
}

Описание кода

  1. Инициализация шума: Используем функцию uniform01(rnd) для генерации случайных чисел.
  2. Обход всех пикселей изображения: Для каждого пикселя вычисляем новое значение, добавляя к текущему значению пикселя шум.
  3. Ограничение значений пикселей: Используем функцию min для предотвращения выхода значений пикселей за пределы допустимого диапазона [0, 1].
  4. Сохранение изображения: Сохраняем измененное изображение на диск.

Примеры применения

Посмотрим на примеры изображений до и после добавления шума.

Исходное изображение

Исходное изображение

Изображение с шумом

Изображение с шумом

Карпов Ярослав

Автор статьи:

Обновлено:

12.06.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *