Войти
ПрограммированиеФорумФизика

Сгенерить шум, дающий константную свёртку с заданным ядром

Страницы: 1 2 Следующая »
#0
(Правка: 7:31) 7:30, 16 окт. 2019

Речь идёт о генерировании 2д шума (цветное изображение). Есть некоторое ядро, используемое в качестве фильтра, например, гауссовый блюр. Требуется сгененировать шум, который в свёртке с этим ядром даст как можно более константное значение.

Думаю, логичнее всего пойти по пути проекции: взять некоторый исходный шум, например, белый шум, и вычитать из него компоненты свёртки, которые дают ненулевой вклад. Вопрос в том, как вычитать.

Например, таким свойством обладает синий шум — его свёртка с ядром блюра равна примерно константе. Хочется, чтобы это работало в более общем случае.

#1
8:06, 16 окт. 2019

Suslik
Я могу ошибаться но по-моему свертки становится просто произведениям в пространстве фурье

То есть переводишь ядро вы фурье пространство, переводишь результат в фурье пространство. И их отношение даёт нужен фильтр разве не так?

#2
9:28, 16 окт. 2019

mega_otec
> Я могу ошибаться но по-моему свертки становится просто произведениям в пространстве фурье
да, это так. посчитать свёртку я могу легко

> То есть переводишь ядро вы фурье пространство, переводишь результат в фурье пространство. И их отношение даёт нужен фильтр разве не так?
а вот здесь — вопрос. там, где ядро в фурье-пространстве равно нулю, исходная функция (шум) должна остаться без изменений, а при делении она улетит в бесконечность. я пробовал более хитрые выражения вроде
val *= 1 / (1 + kernel)
но это тоже не так просто, так как если kernel = -1, то оно всё равно улетает в бесконечность, хотя по смыслу не должно.

#3
10:56, 16 окт. 2019

Формулировка плывет. Вместо слов дай строго формальную постановку, с формулами. А на пальцах, как уже выше сказали, R = S * F
R - спектр результата, S - спектр сигнала, F - АЧХ фильтра (спектр=ряд Фурье).
Твое требование "как можно более константное значение" я не могу трактовать иначе кроме как "R имеет только низкие частоты".
Отсюда вывод : какой бы не был фильтр - подавай низкочастотный сигнал получишь и на выходе НЧ.
Вывод банальный, поэтому и сомнения в формулировке. Доведенный до абсурда - подавай вообще нуль, и на выходе будет нуль.

#4
11:07, 16 окт. 2019

Suslik
 

Все эти свертки работают в доп линейности процесса или слабой нелинейности. Так может получится, что метод просто неприменим в твонм случае.

#5
(Правка: 11:57) 11:56, 16 окт. 2019

ну так дано ядро K на 2д плоскости, требуется сгенерить такой шум F, чтобы F*K=0 (ну или константе, это не важно). ясное дело, что если говорится "шум", то он должен быть не тождественным нулём везде.

#6
12:40, 16 окт. 2019

Suslik
> ясное дело, что если говорится "шум", то он должен быть не тождественным нулём
> везде

- Дай мне маленькое число только не нуль
- 0.1 годиться?

У тебя задача недоопределена. Вот еще вариант: если К - низкочастотный (блур это по сути НЧ), то годиться любой ВЧ шум. Например дельта импульс со случайным периодом. Годиться?

#7
12:48, 16 окт. 2019

мне кажется, задачу можно упростить. забудем про шум. как просто сгенерить хоть какую функцию, свёртка известного ядра с которой была бы (около-)нулевой? ясное дело, что если ядро соответствует lowpass фильтру, то функция будет высокочастотная, но у меня ядро произвольное и хочется найти, как быстро строить функции, свёрстка с которыми будет давать ноль.

ещё особенность — меня в общем-то интересует только действительная часть свёртки. то есть мнимая часть может быть какой угодно. но я не уверен, что имеет смысл пользоваться этим свойством.

#8
12:54, 16 окт. 2019

Suslik
> забудем про шум.

И где стало легче? Детерминированый сигнал тоже можно считать шумом в отсутствии других ограничений. Задача по прежнему недоопределена. Должно быть какое то формальное требование которое само отбросит нулевое решение, а ни так на словах "дайте мне чтото маленькое но не нуль". Маленькое по сравнению с чем?

#9
12:55, 16 окт. 2019

Suslik
> ещё особенность — меня в общем-то интересует только действительная часть
> свёртки

Так она вся действительная, если мы говорим о сигнале и ядре действительном. Не путать свертку с ее Фурье преобразованием.

#10
13:04, 16 окт. 2019

slepov
ты задаёшь очень много вопросов, ответы на которые никак не приблизят меня к решению. если ты всё ещё не догадался, что мне нужно сделать, то ты в любом случае не догадаешься, как этого добиться. поэтому я подожду кого-нибудь, кто в теме.

#11
13:08, 16 окт. 2019

Suslik
> если ты всё ещё не догадался, что мне нужно сделать

Сусел, ты сама конструктивность. Ты не в состоянии формализовать задачу а я должен догадываться )). Тавай, сворачивай дальше

#12
13:38, 16 окт. 2019

Suslik
> как просто сгенерить хоть какую функцию, свёртка известного ядра с которой была бы (около-)нулевой?
Ну так ты же сам написал, что F*K = 0. В Фурье-пространстве, соответственно, [cht]F(w)K(w)=0[/cht].
Т. е. [cht]F(w)[/cht] может отличаться от нуля только для таких [cht]w[/cht], при которых [cht]K(w)=0[/cht].

#13
13:47, 16 окт. 2019

}:+()___ [Smile]
но особенность в том, что без ограничения общности K(w) != 0 во всех точках. то есть оно во всех точках имеет какое-то ненулевое значение. поэтому не совсем понятно, как именно занулить F(w) гладко.

#14
(Правка: 13:58) 13:57, 16 окт. 2019

}:+()___ [Smile]
> Ну так ты же сам написал, что F*K = 0.

Он с элементарной математикой не  дружит ). шейдер мозга у него.
В случае где надо почти нуль но не нуль обычно добавляют условие нормировки какой нить. Типа |F|=1. Подозреваю что эта искомая F тогда равна просто 1/K, т.е. обратный фильтр. На выходе тогда будет просто шум, который зануляй сколько влезет.
Ну сусел так увлечен уравнением Новье-Стокса что боюсь ему это не понять. Даже задача то сама по себе абсурдная.

Страницы: 1 2 Следующая »
ПрограммированиеФорумФизика