Як я можу знизити фільтр, зменшивши лише пікові дані?


16

У мене є двовимірне зображення, яке я хочу знизити у фільтр, з такими показниками обмежень / якості:

  1. Я не можу "додати" світло до зображення, тому кожен піксель у результаті повинен бути <= відповідний піксель на вході.
  2. Частота відсікання низької частоти повинна бути параметром, з яким можна експериментувати
  3. Застосування цього фільтра неодноразово не повинно суттєво змінити результат.
  4. Час, необхідний для запуску цього алгоритму (5 хвилин для 5MPix зображення здається розумним)
  5. Мінімізація кількості світла, яке фільтрується.

Нижче наведено кілька підходів, які я спробував, разом із їхніми недоліками:

  1. Гауссовий фільтр подобається нормальному, а потім потягніть результат вниз, щоб відповідати обмеженню 1. Це дуже добре відповідає першим 3 балам, але зменшує набагато більше світла, ніж потрібно.

  2. Встановлення парабол "вгору" через "низькі" точки і параболи "вниз" між ними, щоб згладити. Це чудово працює в 1D, але застосовуючи його спочатку горизонтально, потім вертикально дає погані результати в 2D. Це займає набагато більше часу, але не надто довго для мого застосування. Однак повторне застосування цього фільтра різко змінить результат. Якщо вхід (1D) є ідеальною "низхідною" параболою (яку взагалі не слід фільтрувати), її замінять 2 "вгору" параболи, що сидять на початку / кінці.

  3. Використовуючи деяку іншу форму 2D "базових" функцій та лінійне рішення, щоб знайти оптимальні параметри. Це ідея лише наразі, ще не реалізована / протестована.

Моя область досвіду обробки сигналів - це майже виключно обробка зображень, тому я сподіваюся знайти альтернативи цій проблемі із залученням експертів, що працюють в інших сферах обробки сигналів.

оновлення 2011/08/18

Виходячи з поточних реакцій, я вирішив зробити щось більш зрозумілим, додавши графіки типового введення та результати 3-х підходів, які я описав спочатку + пропозиції, які я отримав до цього часу. Для зручного порівняння в цих прикладах я використовував лише 1D фільтрацію.

Вхідні дані: Вхідні дані

Гауссовий фільтр + збиває його, щоб він відповідав вимозі (1).
Ви можете бачити, що його зменшення призводить до непотрібного зменшення світла з правого боку. гауссова відфільтрована

Параболи
Що стосується мене, це дуже чудово, на жаль, воно не перекладається ідеально на 2D, застосовуючи спочатку горизонтальну, потім вертикальну. У цьому випадку ви також бачите, що я можу оцінити встановлені параболи за роздільною здатністю з плаваючою точкою, що є невеликою перевагою, але не є абсолютно необхідною. припарка параболи

Ерозія сірого
масштабу На підставі пропозиції rwong я спробував ерозію сірого масштабу. Я використовував структуруючий елемент з тією ж параболічною формою, що і мої "приталені" параболи. Результат майже однаковий, тому це виглядає перспективно. Однак є ще кілька проблем: 1. Мій структуруючий елемент не був "досить великим" (хоча він був уже в ширину 801 пікселів) до наступного. сіра ерозія

Середня фільтрація
Включена лише для повноти, вона насправді не те, що я хочу. серединний фільтр

необроблені дані
Я вставив необроблені вхідні дані + різні команди python на пастбін, тож ви можете експериментувати і з тими ж даними.
http://pastebin.com/ASnJ9M0p


1
Чи можете ви пояснити трохи більше про обмеження 1 і 5? Вони здаються (на перший погляд) суперечливими.
Пітер К.

Я, мабуть, нерозумію, що ви маєте на увазі під цим алгоритмом, але 5 хвилин на 5 МП здаються багатьма для застосування фільтра низьких частот.
bjoernz

Відповіді:


8

Дійсно є версія 2D для вашої спроби №2 - вона схожа в теорії, але її неможливо розкласти на дві одновимірні операції. Будь ласка, прочитайте про "2D морфологічну фільтрацію сірого кольору". Це швидше, ніж крива підгонки.

Середня фільтрація також може бути корисною, якщо ви намагаєтесь видалити плями. Більш досконалою формою серединного фільтрування є «порядкове фільтрування».

У всіх випадках вимогу №1 можна задовольнити тривіально, взявши мінімум пікселя між виходом та входом. Це важливий критерій якості, але це не обмежить вибір алгоритмів.


Гауссова фільтрація (та ряд інших корисних фільтрів) можна розкласти (спочатку від 2D до 1D операцій, потім за допомогою перетворення Фур'є), але є багато інших корисних методів обробки зображень, які не піддаються розкладанню, що робить їх повільними, але не зменшуються їх корисність.


Привіт, дякую за вказівник на морфологічну фільтрацію сірого кольору. Опис у Вікіпедії здається цікавим, і я це досліджу. Однак у вашому посиланні на документацію OpenCV я бачу лише звичайні морфологічні фільтри, а не сірі. Я напевно перевіряю цей варіант і повідомлю про результати. Спасибі.
Пітер-Ян Бусшаерт

6
Чи взагалі допомагає пропозиція rwong про серединну фільтрацію? Пояснення трохи більше про те, чого ви намагаєтеся досягти, представивши простий приклад даних та "підроблений" приклад того, що ви хочете отримати, може допомогти.
Пітер К.

Я оновив своє запитання вибірковими даними + результати з різних пропозицій. Я сподіваюся, що зараз все зрозуміліше.
Пітер-Ян Бусшаерт

2

Я пропоную використовувати розгладжувальну шпильку.

Ось як це можна зробити за допомогою Matlab з надійною функцією згладжування сплайну SMOOTHN з файлу обміну файлами Matlab (який містить повний вихідний код, щоб ви могли повторно реалізувати його деінде за потреби). Зауважте, що він також функціонує з n-мірними даними:

%# - get inputlist from pastebin

%# - smoothen data. Lower factor means less smooth
smoothingFactor = 1000;
smoothData = smoothn(inputlist,smoothingFactor);

%# - shift down
smoothData = smoothData - max(inputlist-smoothData);

%# - show results
plot(inputlist,'b'),hold on,plot(smoothData,'r')

введіть тут опис зображення


Дякую за вашу пропозицію, я досліджу це. З вашого графіку, здавалося б, мені потрібен набагато вищий згладжуючий фактор, ніж ваш приклад. Крутий край навколо х = 700 не знімається і буде добре видно. Також початковий удар в x = [0, 400] взагалі не знімається. Ви не думаєте, що це матиме таку ж проблему, як і будь-який інший (фільтр низьких частот + рух вниз)? Ви можете побачити глобальне зміщення між двома графіками, яке, ймовірно, навіть збільшиться, коли я використовую більш високий згладжуючий фактор.
Пітер-Ян Бусшаерт

@ Pieter-JanBusschaert: О, я думав, що перший пік якимось чином корисний вам. У будь-якому випадку, весь фільтр низьких частот + переміщення вниз матиме труднощі зі стрімким підйомом на ~ 650: Вони зроблять цю частину більш плоскою, і, отже, криву треба сильно перемістити вниз. Середній фільтр з подальшим згладжуванням сплайну трохи допомагає.
Йонас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.