Heim > Backend-Entwicklung > Python-Tutorial > Eine Sammlung von Beispielen für Binarisierungsmethoden für die Python-Bildverarbeitung

Eine Sammlung von Beispielen für Binarisierungsmethoden für die Python-Bildverarbeitung

coldplay.xixi
Freigeben: 2020-07-27 17:10:50
nach vorne
2621 Leute haben es durchsucht

Eine Sammlung von Beispielen für Binarisierungsmethoden für die Python-Bildverarbeitung

Bei der Verwendung von Python für die Bildverarbeitung ist die Binarisierung ein sehr wichtiger Schritt. Jetzt habe ich 6 Bildbinarisierungsmethoden zusammengefasst, auf die ich gestoßen bin (natürlich ist dies definitiv nicht der Fall). Alle Binarisierungsmethoden werden fortgesetzt hinzugefügt werden, wenn neue Methoden entdeckt werden).

Verwandte Lernempfehlungen: Python-Video-Tutorial

1. opencv einfacher Schwellenwert cv2.threshold

2 cv2.adaptiveThreshold (Es gibt zwei Methoden zur Berechnung von Schwellenwerten in adaptiven Schwellenwerten: mean_c und guassian_c. Sie können versuchen, welche besser ist)

Otsus Binarisierung

Beispiel:

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()
Nach dem Login kopieren

Ergebnisbild:

4. Skimage-Niblack-Schwellenwert

5. Skimage-Sauvola-Schwellenwert (wird hauptsächlich zur Texterkennung verwendet)

Beispiel:

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['font.size'] = 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('Original')
plt.axis('off')

plt.subplot(2, 2, 2)
plt.title('Global Threshold')
plt.imshow(binary_global, cmap=plt.cm.gray)
plt.axis('off')

plt.subplot(2, 2, 3)
plt.imshow(binary_niblack, cmap=plt.cm.gray)
plt.title('Niblack Threshold')
plt.axis('off')

plt.subplot(2, 2, 4)
plt.imshow(binary_sauvola, cmap=plt.cm.gray)
plt.title('Sauvola Threshold')
plt.axis('off')

plt.show()
Nach dem Login kopieren

Ergebnisdiagramm:

6.IntegralThreshold (wird hauptsächlich zur Texterkennung verwendet)

Verwendung: Führen Sie die Datei util.py unter der folgenden URL aus:

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

Ergebnisdiagramm:

Das obige ist der detaillierte Inhalt vonEine Sammlung von Beispielen für Binarisierungsmethoden für die Python-Bildverarbeitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage