Хочу описать, один из нелинейных алгоритмов выделения контуров на изображениях.
Почти все известные алгоритмы выделения контуров подходя к изображению как матрице чисел с значениями 0..255, целыми числами в пределах одного машинного байта (16 бит вариант рассмотрим посже). Потом, делается свертка с матрицей коэфициентов.
А если так не делать?
Но если углубится, в нашем анализе, и предположить еще более глубокое дробление изображения, а именно «расшить» его на бинарные слои.
в место одной матрицы значений 0..255 рассмотрим 8 матриц, того же размера, но со значениями 0..1
А теперь применим к полученным бинарным матрицам свертку с…
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/c05/c79/ea5/c05c79ea56d951c40a0ef0f51495339a.jpg)
Без коэфициентов. Просто выполним функцию булевской алгебры. Ведь входные данные — это бинарные значения. [1]
Откуда взялась эта булевская функция?
наглядные результаты:
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/bbc/677/4ae/bbc6774ae8fe9af1840443937386a3b7.jpg)
для сравнения:
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/571/cb6/494/571cb6494343370cfc4dce199917c7cd.jpg)
и еще один «живой» пример
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/28b/be9/7bd/28bbe97bdc75b2412a5df9a667ec237c.jpg)
варианты
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/423/4af/71d/4234af71d223aa01daea3b494dae1a09.jpg)
«по восходящей»
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/793/7d1/ef6/7937d1ef6f884898421bd57417e8dc08.jpg)
«по нисходящей»
[1] Aizenberg I. and Butakoff C., “Image Processing Using Cellular Neural Networks Based on Multi-Valued and Universal Binary Neurons”, Journal of VLSI Signal Processing Systems for Signal, Image and Video Technology, Vol. 32, 2002, pp. 169-188.
[2] X.Z.Sun, and A.N.Venetsanopoulos “Adaptive Schemes for Noise Filtering and Edge Detection by us
Statistics”, IEEE Transactions on Circuits and Systems, vol. CAS-35, 1988, pp. 57-69
[3] R.M.Haralick “Statistics and Structural Approach to Texture”, Proceedings IEEE, vol. 67, No 5, 1979, pp. 786-804
Классика
Почти все известные алгоритмы выделения контуров подходя к изображению как матрице чисел с значениями 0..255, целыми числами в пределах одного машинного байта (16 бит вариант рассмотрим посже). Потом, делается свертка с матрицей коэфициентов.
А если так не делать?
А если так не делать?
Но если углубится, в нашем анализе, и предположить еще более глубокое дробление изображения, а именно «расшить» его на бинарные слои.
в место одной матрицы значений 0..255 рассмотрим 8 матриц, того же размера, но со значениями 0..1
А теперь применим к полученным бинарным матрицам свертку с…
![image](https://habrastorage.org/getpro/habr/post_images/c05/c79/ea5/c05c79ea56d951c40a0ef0f51495339a.jpg)
Без коэфициентов. Просто выполним функцию булевской алгебры. Ведь входные данные — это бинарные значения. [1]
Разоблачение
Откуда взялась эта булевская функция?
- скажем, что контур найден в некотором пикселе бинарного изображения, если значение яркости этого писеля отличается от значения яркости хотя бы одного из окружающих его пикселей в окне n x n. Случай изолированного пикселя исключается из рассмотрения требованием: значение рассматриваемового пикселя должно совпадать с значением хотя бы одного из окружающих пикселей;
- контур по восходящей (от 0 к 1, где 1 это значение анализируемого пикселя), контур по нисходящей (от 1 к 0, где 0 значение анализируемого пикселя) не совпадают;
- из второго постулата получаем, что есть три варианта выделения контуров а) отдельные контуры по восходящей; б) отдельные контуры по нисходящей; в) объединенное выделение контров по восходящей и нисходящей изменениям яркости.
наглядные результаты:
![image](https://habrastorage.org/getpro/habr/post_images/bbc/677/4ae/bbc6774ae8fe9af1840443937386a3b7.jpg)
- исходное (элетронный микроскоп)
- контура по нашей формуле
- поднятый контраст по нашему результату
для сравнения:
![image](https://habrastorage.org/getpro/habr/post_images/571/cb6/494/571cb6494343370cfc4dce199917c7cd.jpg)
- контура по линейному оператору Собелю
- контура по материалам [2]
- контура по материалам [3]
и еще один «живой» пример
![image](https://habrastorage.org/getpro/habr/post_images/28b/be9/7bd/28bbe97bdc75b2412a5df9a667ec237c.jpg)
варианты
![image](https://habrastorage.org/getpro/habr/post_images/423/4af/71d/4234af71d223aa01daea3b494dae1a09.jpg)
«по восходящей»
![image](https://habrastorage.org/getpro/habr/post_images/793/7d1/ef6/7937d1ef6f884898421bd57417e8dc08.jpg)
«по нисходящей»
[1] Aizenberg I. and Butakoff C., “Image Processing Using Cellular Neural Networks Based on Multi-Valued and Universal Binary Neurons”, Journal of VLSI Signal Processing Systems for Signal, Image and Video Technology, Vol. 32, 2002, pp. 169-188.
[2] X.Z.Sun, and A.N.Venetsanopoulos “Adaptive Schemes for Noise Filtering and Edge Detection by us
Statistics”, IEEE Transactions on Circuits and Systems, vol. CAS-35, 1988, pp. 57-69
[3] R.M.Haralick “Statistics and Structural Approach to Texture”, Proceedings IEEE, vol. 67, No 5, 1979, pp. 786-804