Я работаю над проектом применения Active Shape Model для определения местоположения зуба на рентгенограмме. Для тех, кто знаком с техникой, в настоящее время я пытаюсь выбрать нормальные векторы для каждого ориентира. В документе рекомендуется брать производные от выбранных пикселей: «Чтобы уменьшить влияние глобальных изменений интенсивности, мы производим выборку по производной по профилю, а не по абсолютным значениям уровня серого».
Поэтому моя проблема в том, как наилучшим образом отфильтровать рентгенограммы, чтобы подготовить их к применению производного оператора. В настоящее время я использую комбинацию медианного фильтра, чтобы удалить большую часть того, что я считаю квантовым шумом (пятнистость). Затем следует двусторонний фильтр . Затем я применяю оператор Шарра для вычисления фактического градиента, который должен быть выбран.
Первое изображение показывает исходные данные. Во втором и третьем изображении отфильтрованные данные представлены сначала в виде величины спектра после БПФ, а затем в виде данных отфильтрованного изображения. Четвертое изображение показывает результат применения оператора Шарра к третьему изображению.
Мои вопросы:
- Существуют ли хорошо известные подходы для снижения шума на рентгенограмме, которые могут отличаться от моего подхода?
- Что вызывает «дымный» вид краев и «плоских» (не краевых) участков? Это какой-то остаточный шум в отфильтрованном изображении, или это присуще оператору градиента? Если это действительно шум, какой фильтр будет наиболее подходящим для использования? Медианный фильтр был хорош при удалении маленьких шумных пятен, но большое ядро заставляет края слишком сильно размываться. Таким образом, двусторонний фильтр используется для фильтрации больших пятен и выравнивания цвета по площади без ущерба для краев, но он не способен фильтровать эту дымную структуру.
- Есть ли лучший вариант, чем оператор Шарра, для создания градиента в этом случае?
- Бонус: Будет ли это хорошим вкладом для Active Shape Model? Я еще не знаю, насколько они крепки.
Ответы:
Насколько я понял, под выводом изображения вы подразумеваете выделение краев. Я бы порекомендовал отфильтровать изображение с помощью относительно большого фильтра Гаусса. Если вычислительные затраты на вывод изображения не являются критичными для вашей работы, я бы порекомендовал использовать детектор краев Canny. Он менее чувствителен к шуму, не дурачится шумом и находит слабые края вместе с сильными краями. Инструкция Matlab для этого:
и результат (я знаю, что это могут быть не те результаты, которые вы ищете, однако, играя с переменными Threshold и размером фильтра, вы получите желаемые результаты):
Обратите внимание, что вы больше не видите дымный эффект. Также о тех неправильных краях, вы можете удалить их, используя методы открытия и закрытия изображения.
источник