Катаев Александр - singularis lab...cv2.bilateralfilter(src, d, c, s[, dst[,...
TRANSCRIPT
![Page 1: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/1.jpg)
Фильтрация изображений
Катаев Александр Ведущий инженер-программист, к.т.н.
Алексеев Алексей Инженер-программист
Singularis Lab, Ltd.
![Page 2: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/2.jpg)
Найди кота!
15 - 21 августа, Иннополис 2
![Page 3: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/3.jpg)
Шум
15 - 21 августа, Иннополис 3
![Page 4: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/4.jpg)
Размытие (усреднение) 5x5
15 - 21 августа, Иннополис 4
![Page 5: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/5.jpg)
Границы зашумленного изображения
15 - 21 августа, Иннополис 5
![Page 6: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/6.jpg)
Границы фильтрованного изображения
15 - 21 августа, Иннополис 6
![Page 7: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/7.jpg)
Оператор свертки
𝑔 = 𝐼 ∗ ℎ
𝑔 𝑖, 𝑗 = 𝐼 𝑖 − 𝑘, 𝑗 − 𝑙 ℎ(𝑘, 𝑙)
𝑘,𝑙
![Page 8: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/8.jpg)
Свертка
15 - 21 августа, Иннополис 8
![Page 9: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/9.jpg)
Примеры ядер свертки
Identity
Box
Gauss
15 - 21 августа, Иннополис 9
10 0 00 1 00 0 0
1
9
1 1 11 1 11 1 1
1
16
1 2 12 4 21 2 1
![Page 10: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/10.jpg)
Примеры ядер свертки
edges
v-edges
h-edges
15 - 21 августа, Иннополис 10
0 1 01 −4 10 1 0
−1 0 1
−101
![Page 11: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/11.jpg)
Оператор Собеля
𝐺𝑥
𝐺𝑦
Sobel
15 - 21 августа, Иннополис 11
−1 −2 −10 0 01 2 1
−1 0 1−2 0 2−1 0 1
𝐺𝑥2 + 𝐺𝑦
2
![Page 12: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/12.jpg)
Фильтр Canny
1. GaussBlur 2. Gx=…, Gy =…
3. G = 𝐺𝑥2 + 𝐺𝑦
2
4. Θ = arctan𝐺𝑦
𝐺𝑥, округляем до
𝜋
4
5. G > thresh_up –> accept 6. G < thresh_low -> reject 7. G >= thresh_low И G <= thresh_up -> accept, if
connected with accepted
15 - 21 августа, Иннополис 12
![Page 13: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/13.jpg)
Сепарабельные фильтры
𝐴𝑎 𝐴𝑏 𝐴𝑐𝐵𝑎 𝐵𝑏 𝐵𝑐𝐶𝑎 𝐶𝑏 𝐶𝑐
=𝐴𝐵𝐶⋅ [𝑎 𝑏 𝑐]
I∗𝐴𝑎 𝐴𝑏 𝐴𝑐𝐵𝑎 𝐵𝑏 𝐵𝑐𝐶𝑎 𝐶𝑏 𝐶𝑐
= 𝐼 ∗𝐴𝐵𝐶⋅ 𝑎 𝑏 𝑐 = 𝐼 ∗
𝐴𝐵𝐶∗ 𝑎 𝑏 𝑐
![Page 14: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/14.jpg)
Фильтр Гаусса
𝐺𝑖 = 𝑒−𝑖−𝑘𝑠𝑖𝑧𝑒−12
2
2𝜎2
15 - 21 августа, Иннополис 14
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst
![Page 15: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/15.jpg)
Размеры ядра и sigma
15 - 21 августа, Иннополис 15
![Page 16: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/16.jpg)
Нерезкое маскирование
• Нерезкое маскирование (unsharp mask)
I𝑝 = 𝐼 + 𝛾(𝐼 − ℎ ∗ 𝐼)
• Многоуровневая фильтрация
𝐼1 = ℎ1 ∗ 𝐼, 𝐼2 = ℎ2 ∗ 𝐼, … I𝑝 = 𝐼 + 𝛾1 𝐼 − 𝐼1 + 𝛾2 𝐼1 − 𝐼2 +⋯
15 - 21 августа, Иннополис 16
![Page 17: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/17.jpg)
Нерезкое маскирование
15 - 21 августа, Иннополис 17
![Page 18: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/18.jpg)
AdaptiveThreshold
15 - 21 августа, Иннополис 18
Thresh(80) Thresh(200) Adaptive (size=201)
![Page 19: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/19.jpg)
Нелинейные фильтры
• Билатеральный (bilateralBlur)
• Медианный (medianBlud)
• Морфологические операции (erode, dilate, morphologyEx)
![Page 20: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/20.jpg)
Фильтр Гаусса
𝐼𝑝 𝑥 =1
𝑊𝑝 𝐼 𝑥𝑖 𝐺𝜎 |𝐼 𝑥𝑖 − 𝐼 𝑥
𝑥∈Ω
𝐺𝜎 𝑥 =1
2𝜋𝜎2𝑒−𝑥2
2𝜎2
• Размывает все
• Может работать очень быстро
15 - 21 августа, Иннополис 20
![Page 21: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/21.jpg)
Билатеральный фильтр
𝐼𝑝 𝑥 =1
𝑊𝑝 𝐼 𝑥𝑖 𝐺𝑐 |𝐼 𝑥𝑖 − 𝐼 𝑥 𝐺𝑠 𝑥𝑖 − 𝑥
𝑥∈Ω
𝐺𝜎 𝑥 =1
2𝜋𝜎2𝑒−𝑥2
2𝜎2
cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst
• Сохраняет контрастные границы • Убирает небольшие шумы и неконтрастную текстуру • Нелинейный, очень медленный для больших окон
15 - 21 августа, Иннополис 21
![Page 22: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/22.jpg)
Bilateral: sigma_c=20, sigma_s=10, size=51
15 - 21 августа, Иннополис 22
![Page 23: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/23.jpg)
original
15 - 21 августа, Иннополис 23
![Page 24: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/24.jpg)
Gaussian: sigma=20, size=51
15 - 21 августа, Иннополис 24
![Page 25: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/25.jpg)
Медианный фильтр
• Значения в окне сортируются по интенсивности, выбирается среднее и записывается в выходной массив
• Нелинейный (медленный)
• Эффективно удаляет точечный шум (малое окно)
• Выполняет примитивную сегментацию (большое окно)
15 - 21 августа, Иннополис 25
![Page 26: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/26.jpg)
Точечный шум
15 - 21 августа, Иннополис 26
![Page 27: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/27.jpg)
Отфильтрованное изображение (k=3)
15 - 21 августа, Иннополис 27
![Page 28: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/28.jpg)
K=5
15 - 21 августа, Иннополис 28
![Page 29: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/29.jpg)
K=11
15 - 21 августа, Иннополис 29
![Page 30: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/30.jpg)
K=25
15 - 21 августа, Иннополис 30
![Page 31: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/31.jpg)
canny
15 - 21 августа, Иннополис 31
![Page 32: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/32.jpg)
canny, median k=5
15 - 21 августа, Иннополис 32
![Page 33: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/33.jpg)
canny, median k=25
15 - 21 августа, Иннополис 33
![Page 34: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/34.jpg)
Морфологическая фильтрация
• Эрозия
res = cv2.erode(img,kernel)
• Дилация
res = cv2.dilate(img,kernel)
kernel = np.ones((3,3),np.uint8)
15 - 21 августа, Иннополис 34
![Page 35: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/35.jpg)
Морфологическая фильтрация
• Открытие = dilate(erode(image)) cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
• Закрытие = erode(dilate(image)) cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
15 - 21 августа, Иннополис 35
![Page 36: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/36.jpg)
Пример MORPH_OPEN
15 - 21 августа, Иннополис 36
![Page 37: Катаев Александр - Singularis Lab...cv2.bilateralFilter(src, d, c, s[, dst[, borderType]]) → dst •Сохраняет контрастные границы •Убирает](https://reader036.vdocuments.mx/reader036/viewer/2022081407/5f24349fe266bf1b563c676c/html5/thumbnails/37.jpg)
Спасибо за внимание
37
Александр Катаев
Алексей Алексеев
https://www.singularis-lab.com/
https://www.linkedin.com/company/singularis-lab-llc
http://habrahabr.ru/company/singularis
http://vk.com/singularis_lab
15 - 21 августа, Иннополис