Pull to refresh

Comments 15

Спасибо за статью! Я тоже как раз страдаю от полос на рентгеновском изображении ))

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

Не упрек, а уточнение. За статью спасибо. Этот метод еще бы и на gpu перевести… Да в реальном времени.

По планам алгоритм уйдет в производство в реализации для CPU. Прикидки показывают, что все и так будет в реальном времени. Такого рода предобработка занимает о-малое от реконструкции, а код для CPU пока еще оказывается более долгоживущим и легким в поддержании.

Стоит все же грамотно использовать термины:


Для каждого столбца выполним операцию одномерной свертки, чтобы уменьшить вклад высокочастотной шумовой компоненты (рис. 8).

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


Применим построчно операцию кумулятивного суммирования к изображению, представленному на рис. 8.

На картинке слева направо значения нарастают и потом убывают (слева черная область, в центре белая и справа опять черная). Ну, конечно, это может быть кумулятивная сумма по убывающей радиальной координате… если судить по исходной картинке — на кумулятивную сумму по возрастанию горизонтальной координаты не похоже. Что подразумевается автором — остается догадываться.

А может, речь и вовсе про фильтр низких частот, чтобы максимально исключить высокочастотную компоненту? Сначала подумалось про полосовой фильтр в области высоких частот (раз написано «уменьшить вклад»). В общем, это не воспроизводимо.

Заметки на Хабр нами обычно выкладываются по материалам научных публикаций. При этом текст сокращается и упрощается. Цель публикаций на Хабре — познакомить широкий круг людей с идеями и подходами, поэтому многие детали имплементации опускаются. К сожалению, при этом в тексте иногда появляются явные огрехи. Спасибо, что указываете на них, это позволит нам стать лучше. Последний же Ваш комментарий гораздо важнее. Для тех, кто хочет воспроизвести наш алгоритм (мы даже не надеялись на такую удачу) мы рекомендуем обратиться к нашей исходной научной статье: www.jip.ru/2019/200-207-2019.pdf. Там, мы надеемся, мы написали все необходимые детали. Если же мы (и рецензенты) что-то упустили, обращайтесь, мы ничего не утаим.

О, отлично! Хорошо бы эту ссылку в статью добавить, а то там в списке материалов совсем не то...

Посмотрел статью — все сводится к вызову неведомой функции ImGuidedFilter, которая в OpenCV отсутствует и что и как она делает, в статье не сказано. Сказано только, что результат этой функции просто супер. Мда.

Я тоже на эту функцию посмотрел, но название отличается ImGuidedFilter != guidedFilter и функция не из ядра OpenCV, а из дополнительных модулей — обо всем этом принято явно говорить в статьях, если уж зачем-то нужно переименовать библиотечную функцию и использовать дополнительные модули. На просторах интернета для OpenCV есть еще несколько отличающихся реализаций guidedFilter, кстати. В матлабе есть одноименная функция ImGuidedFilter, может, код у авторов вообще на матлабе написан, а для статьи несколько строчек переписали на питоне...

Sign up to leave a comment.