Шум соли и перца
Использование
Массивы, изображения в оттенках серого и RGB-изображения
Для массивов, изображений в оттенках серого (Array{<:Gray}
) и RGB-изображений (Array{<:RGB}
) доступен следующий метод.
salt_pepper(X; salt_prob=0.5, salt=1.0, pepper=0.0[, prob])
Этот метод задает шум соль или перца для каждого пикселя и канала в отдельности. В случае с RGB-изображениями это означает, что каждый цветовой канал пикселя получает собственное количество соли или перца. Должен быть предоставлен массив X
. prob
является необязательным аргументом, следующим за X
. Это значение представляет собой вероятность того, что отдельный пиксель будет подвержен воздействию шума. В случае если пиксель получает шум, мы выбираем либо соль, либо перец. salt_prob
является необязательным аргументом, описывающим вероятность того, что выбранный пиксель будет затронут шумом соли. Поэтому 1-salt_prob
описывает вероятность шума перца. Кроме того, мы можем выбрать числовое значение для соли и перца, используя именованный аргумент salt
и pepper
, соответственно. Для RGB-изображений эффект больше похож на цветовой, поскольку мы воздействуем на каждый канал в отдельности, а не только на пиксель.
RGB-изображения с одинаковыми каналами
Для RGB-изображений (Array{<:RGB}
) доступен следующий метод:
salt_pepper_chn(X; salt_prob=0.5, salt=1.0, pepper=0.0[, prob])
Этот метод, в отличие от предыдущего, не добавляет шум в каждый цветовой канал элемента независимо, а устанавливает значение шума для каждого канала пикселя. Для RGB-изображения так вводятся реальные черные и белые точки.
Примеры
Изображения
Вот несколько примеров с изображениями.
using Noise, TestImages, Images
img_gray = testimage("fabio_gray_256")
img_color = testimage("fabio_color_256")
img_gray_noise = salt_pepper(img_gray)
img_color_noise = salt_pepper(img_color)
img_color_channel_noise = salt_pepper_chn(img_color)
# 30 % пикселей являются черными или белыми
img_gray_noise_heavy = salt_pepper(img_gray, 0.3)
# 10 % пикселей являются белыми
img_gray_noise_white = salt_pepper(img_gray, 0.1, salt_prob=1)
# 10 % пикселей являются серыми
img_gray_noise_gray = salt_pepper(img_gray, 0.1, salt_prob=0, pepper=0.7)
Изображения расположены в том же порядке, что и команды. На среднем изображении шум накладывается на каждый цветовой канал по отдельности, на правом — на все каналы пикселя. Поэтому на среднем изображении присутствует цветовой шум, а шум на изображении справа соответствует некоторому шуму интенсивности. 10 % шума означает, что только к 10 % всех пикселей применен шум, по умолчанию это означает примерно 5 % белых и 5 % черных пикселей.
Серое изображение с 10 % шума | RGB-изображение с шумом, примененным поканально | RGB-изображение с шумом, примененным попиксельно |
---|---|---|
Серое изображение с 30 % шума соли или перца | Серое изображение с 10 % шума соли | Серое изображение с 10 % серого |
---|---|---|
Одномерные массивы
Вот несколько примеров с одномерными массивами.
using Noise, Plots
x = LinRange(0.0, 10.0, 300)
y = sin.(x)
y_noise = salt_pepper(y, 0.05, pepper=-1.0)
y_noise_2 = salt_pepper(y, 0.2, pepper=-0.5, salt=0.5)
plot(x,y);
plot!(x, y_noise);
plot!(x, y_noise_2);
qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: linuxfb, minimal, offscreen, vnc, xcb. Aborted connect: Connection refused GKS: can't connect to GKS socket application GKS: Open failed in routine OPEN_WS GKS: GKS not in proper state. GKS must be either in the state WSOP or WSAC in routine ACTIVATE_WS
Как видите, мы можем ввести шум соли и перца таким же образом в одномерные массивы.