Comments 15
Сейчас более-менее успешно использую один доморощенный алгоритм, хотя изобретать ничего не следовало, так как разных алгоритмов известно много — но все они требуют отнюдь не моего уровня понимания математики и работают явно небыстро. В вашей статье кажется предлагается что-то сравнительно производительное и кажется этого алгоритма я еще не видел. Тем не менее я не все понял, расскажите подробнее (для дураков):
1) По какому основанию логарифмируете исходное изображение?
2) Как именно вычисляется производная поперек полос?
3) Как именно производится свертка вдоль полос?
4) «Применим построчно операцию кумулятивного суммирования к изображению» — как именно? Кумулятивная сумма по строке — это же по логике просто сумма значений в строке, какой в ней смысл?
1) Без разницы, но чтобы легче было обсуждать константы – натуральный.
2) По двухточечному паттерну, не центрированному.
3) Без разницы. Наивной дискретной сверткой, например. Если вопрос на самом деле был о ядре, то оно – гауссово.
4) Кумулятивной суммой в нашей школе называется дискретный аналог неопределенного интеграла. Это не полная сумма, а последовательность частичных сумм.
2) Ну, я догадался, что используется конечная разность, вопрос в том, куда записывается (Yi-Yi-1) — в i-й столбец, или в i+1-й? Ответ наверное очевиден (и может быть вообще нет разницы), но я решил переспросить.
3) Ну то есть просто берете гауссово ядро и каждый пиксель им обрабатываете? Радиус подбирается опытным путем очевидно?
4) Ну, да, кумулятивная сумма так и определяется. Я просто пытаюсь понять, как вы используете эти суммы. То есть в i-й пиксель вы записываете сумму все производных в той же строке до позиции i?
Не упрек, а уточнение. За статью спасибо. Этот метод еще бы и на gpu перевести… Да в реальном времени.
Стоит все же грамотно использовать термины:
Для каждого столбца выполним операцию одномерной свертки, чтобы уменьшить вклад высокочастотной шумовой компоненты (рис. 8).
Видимо, речь все же о фильтре высоких частот. Свертка может быть с разными ядрами и вовсе не все из них будут фильтром высоких частот! Выше в комментариях говорится про гауссово ядро, но и для гауссова ядра далеко не для всех параметров получится фильтр высокой частоты (в пределе можно и свертку с константой получить).
Применим построчно операцию кумулятивного суммирования к изображению, представленному на рис. 8.
На картинке слева направо значения нарастают и потом убывают (слева черная область, в центре белая и справа опять черная). Ну, конечно, это может быть кумулятивная сумма по убывающей радиальной координате… если судить по исходной картинке — на кумулятивную сумму по возрастанию горизонтальной координаты не похоже. Что подразумевается автором — остается догадываться.
А может, речь и вовсе про фильтр низких частот, чтобы максимально исключить высокочастотную компоненту? Сначала подумалось про полосовой фильтр в области высоких частот (раз написано «уменьшить вклад»). В общем, это не воспроизводимо.
О, отлично! Хорошо бы эту ссылку в статью добавить, а то там в списке материалов совсем не то...
Посмотрел статью — все сводится к вызову неведомой функции ImGuidedFilter, которая в OpenCV отсутствует и что и как она делает, в статье не сказано. Сказано только, что результат этой функции просто супер. Мда.
Я тоже на эту функцию посмотрел, но название отличается ImGuidedFilter != guidedFilter и функция не из ядра OpenCV, а из дополнительных модулей — обо всем этом принято явно говорить в статьях, если уж зачем-то нужно переименовать библиотечную функцию и использовать дополнительные модули. На просторах интернета для OpenCV есть еще несколько отличающихся реализаций guidedFilter, кстати. В матлабе есть одноименная функция ImGuidedFilter, может, код у авторов вообще на матлабе написан, а для статьи несколько строчек переписали на питоне...
Алгоритм подавления полос на изображении как инструмент улучшения качества томографической реконструкции