Une collection d'exemples de méthodes de binarisation pour le traitement d'images Python

coldplay.xixi
Libérer: 2020-07-27 17:10:50
avant
2526 Les gens l'ont consulté

Une collection d'exemples de méthodes de binarisation pour le traitement d'images Python

Lors de l'utilisation de Python pour le traitement d'images, la binarisation est une étape très importante. J'ai maintenant résumé 6 méthodes de binarisation d'images que j'ai rencontrées (bien sûr, ce n'est certainement pas le cas. Toutes les méthodes de binarisation continueront. à ajouter si de nouvelles méthodes sont découvertes).

Recommandations d'apprentissage associées : Tutoriel vidéo Python

1. Seuil simple opencv cv2.threshold

2. cv2.adaptiveThreshold (Il existe deux méthodes pour calculer les seuils dans les seuils adaptatifs : mean_c et guassian_c. Vous pouvez essayer laquelle est la meilleure)

3. Binarisation d'Otsu

Exemple :

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('scratch.png', 0)
# global thresholding
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# Otsu's thresholding
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# Otsu's thresholding
# 阈值一定要设为 0 !
ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1, img, 0, th2, img, 0, th3]
titles = [
  'Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)',
  'Original Noisy Image', 'Histogram', "Adaptive Thresholding",
  'Original Noisy Image', 'Histogram', "Otsu's Thresholding"
]
# 这里使用了 pyplot 中画直方图的方法, plt.hist, 要注意的是它的参数是一维数组
# 所以这里使用了( numpy ) ravel 方法,将多维数组转换成一维,也可以使用 flatten 方法
# ndarray.flat 1-D iterator over an array.
# ndarray.flatten 1-D array copy of the elements of an array in row-major order.
for i in range(3):
  plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray')
  plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([])
  plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256)
  plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([])
  plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray')
  plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([])
plt.show()
Copier après la connexion
<. 🎜>Image du résultat :


4. seuil de skimage niblack

5. seuil de skimage sauvola (principalement utilisé pour la détection de texte)


Exemple :

https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_niblack_sauvola.html

import matplotlib
import matplotlib.pyplot as plt

from skimage.data import page
from skimage.filters import (threshold_otsu, threshold_niblack,
               threshold_sauvola)


matplotlib.rcParams[&#39;font.size&#39;] = 9


image = page()
binary_global = image > threshold_otsu(image)

window_size = 25
thresh_niblack = threshold_niblack(image, window_size=window_size, k=0.8)
thresh_sauvola = threshold_sauvola(image, window_size=window_size)

binary_niblack = image > thresh_niblack
binary_sauvola = image > thresh_sauvola

plt.figure(figsize=(8, 7))
plt.subplot(2, 2, 1)
plt.imshow(image, cmap=plt.cm.gray)
plt.title(&#39;Original&#39;)
plt.axis(&#39;off&#39;)

plt.subplot(2, 2, 2)
plt.title(&#39;Global Threshold&#39;)
plt.imshow(binary_global, cmap=plt.cm.gray)
plt.axis(&#39;off&#39;)

plt.subplot(2, 2, 3)
plt.imshow(binary_niblack, cmap=plt.cm.gray)
plt.title(&#39;Niblack Threshold&#39;)
plt.axis(&#39;off&#39;)

plt.subplot(2, 2, 4)
plt.imshow(binary_sauvola, cmap=plt.cm.gray)
plt.title(&#39;Sauvola Threshold&#39;)
plt.axis(&#39;off&#39;)

plt.show()
Copier après la connexion
Graphique des résultats :

6.IntegralThreshold (principalement utilisé pour la détection de texte)

Utilisation : exécutez le fichier util.py à l'URL suivante

https://github.com /Liang-yc/IntegralThreshold

Diagramme de résultat :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal