Изучите интуицию и основные шаги для хитрого обнаружения края

Обнаружение краев - основной компонент обработки изображений. Несмотря на многочисленные достижения в методах, основанных на глубоком обучении, таких как сверточные нейронные сети, которые могут выполнять очень сложное обнаружение краев (то есть краев с различной кривизной, шумом, цветом и т. Д.), Классические методы обнаружения краев по-прежнему очень актуальны в определенных случаях! Например, если известно, что данные просты и предсказуемы; Детектор Canny Edge будет работать сразу после установки по сравнению с CNN, который обычно сложнее реализовать.

Основы обнаружения краев

Большинство классических алгоритмов обнаружения краев основаны на концепции первых производных. На рисунке ниже мы видим теоретический профиль края, где ось y соответствует интенсивности пикселей, а ось x - физическому положению на изображении. На краю изображения происходит быстрый переход от низкой интенсивности к высокой или наоборот. Чем быстрее этот переход, тем более четким будет край. Чтобы обнаружить край, мы просто берем первую производную яркости пикселей и ищем максимальные точки, как показано на втором графике ниже!

Детектор Canny Edge

Обычно эту производную комбинируют с фильтром Гаусса, чтобы выполнить сглаживание изображения и обнаружение краев за один шаг. Поскольку производная и свертка фильтра Гаусса являются линейными операциями, мы просто применяем дифференцированный фильтр Гаусса непосредственно к изображению! Ниже показан пример фильтра 5x5, который завершает эту операцию с σ = 1.

Это дает результат, который уже выделяет положение краев с высоким значением! Однако преимущество Canny в том, что он производит очень тонкие и чистые края. Следующий шаг - немаксимальное подавление (NMS) - достигнет этого. NMS выполняется путем отслеживания высоких значений в выходном изображении с последующей проверкой максимальных градиентов в окрестности 3x3. Центральный пиксель должен быть наивысшим в направлении, перпендикулярном краю, иначе он будет установлен на 0.

В приведенном ниже примере мы видим матрицу 7x7 с образцами выходных данных гауссовского фильтра. Высокие значения будут указывать на то, что первая производная в этом месте высока! Чтобы выполнить NMS, мы отслеживаем направление кромки, затем устанавливаем значения на 0, если они не являются максимальными в нормальном направлении кромки (т. Е. По красной оси). Таким образом, синие ячейки останутся, а все серые ячейки будут установлены на 0 после NMS. Мы видим, что это дает четкую границу шириной всего в один пиксель!

Другой важный компонент обнаружения Canny Edge - это пороговое значение гистерезиса. Звучит очень сложно, но это довольно просто! Этот шаг выполняется в тандеме с NMS, и основная идея состоит в том, чтобы предотвратить фрагментацию зашумленных краев при окончательном обнаружении краев. Выбраны 2 пороговых значения с T1 ›T2. Отслеживание NMS запускается только в том случае, если значения градиента выше, чем T1, и останавливаются, только если значения градиента ниже, чем T2. Это гарантирует, что отслеживание NMS имеет некоторую устойчивость к шумам на краях, где этот допуск может контролироваться значениями T1 и T2.

Вывод

Хотя детекторы Canny Edge и различные классические методы обнаружения краев могут показаться в тени неизменно популярных CNN и методов глубокого обучения, мы должны забыть об их простоте и эффективности. Иногда гораздо проще попробовать классическое решение, и оно может сработать лучше, чем вы ожидаете!