Prétraitement d'image OpenCV python (quatre) : opération de binarisation et de filtrage

1. Binarisation

La binarisation fait référence au réglage des valeurs de pixels de l'image originale à 0 ou 255 via un seuil, et enfin à l'obtention d'une image unidimensionnelle avec des valeurs de pixels de 0 ou 255. Dans des circonstances normales, les images que nous obtenons ou après conversion de l'espace colorimétrique sont toutes des images à 3 canaux. La plupart des informations inutiles peuvent être supprimées par binarisation, et les informations requises peuvent être conservées tout en étant divisées en 0 ou 255 noirs . points, et réduire la dimensionnalité d'une image à 3 canaux à une image à 1 canal peut éliminer la plupart des informations inutiles et réduire la quantité de calcul . La binarisation est une méthode de prétraitement d'image souvent utilisée dans le traitement d'images. Voici deux méthodes de binarisation courantes.

1. Binarisation d'images en niveaux de gris

(1), fonction seuil

Voici la fonction de binarisation d'images en niveaux de gris fournie par opencv-python :

t,img_bin = cv2.threshold(img,thresh,maxval,type)	#二值化,阈值设置
'''
其中t为阈值,img_bin为输出图; img为输入图像,thresh为阈值,maxval为最大值,
type为模式,如下所示:
cv2.THRESH_BINARY	#大于阈值的部分取最大值,小于等于阈值的部分取0
cv2.THRESH_BINARY_INV	#大于阈值的部分取0,小于等于阈值的部分取最大值
cv2.THRESH_TOZERO	#大于阈值的部分不变,小于等于阈值的部分取0
cv2.THRESH_TOZERO_INV	#大于阈值的部分取0,小于等于阈值的部分不变
cv2.THRESH_TRUNC	#大于阈值的部分取阈值,小于等于阈值的部分不变
'''

(2), cas

Le programme ressemble à ceci :

import cv2  # 导入opencv库

if __name__ == '__main__':
    while True:
        img_g = cv2.imread('img/6.jpg', 0)    # 获取路径img/0.jpg的图像,图像类型为RGB图像

        t, img_bin = cv2.threshold(img_g, 180, 255, cv2.THRESH_BINARY)  # 二值化

        cv2.imshow("img_g", img_g)  # 显示RGB图像
        cv2.imshow("img_bin", img_bin)  # 显示二值化图像

        cv2.waitKey(1)  # 等待时间

L'effet est le suivant :
insérer la description de l'image ici

2. Binarisation d'images HSV

Voici la fonction de binarisation d'images HSV fournie par opencv-python :

img_bin = cv2.inRange(img_hsv, lower, upper)	#低于lower、高于upper为0,中间为255

La binarisation des images HSV est introduite dans le troisième article, et elle a également un cas, dans la partie reconnaissance des couleurs : OpenCV python (3) [prétraitement de l'image : conversion de l'espace colorimétrique] && reconnaissance des couleurs
L'effet est montré dans la figure ci-dessous :
insérer la description de l'image ici

2. Opération de filtrage

Le filtrage est un élément indispensable du prétraitement de l'image et de la réduction du bruit. Il peut supprimer la plupart du bruit sans affecter les principales caractéristiques de l'image originale, ce qui détermine la qualité de l'image ultérieure et réduit considérablement la complexité du traitement d'image ultérieur .

1. Filtrage moyen

Le filtrage moyen est un filtrage linéaire. Le principe du filtrage moyen est de prendre la valeur moyenne des pixels environnants comme valeur du point médian. S'il s'agit d'un point de bord, il ne peut pas satisfaire la situation selon laquelle il y a des pixels autour de lui, alors tous les pixels restants du noyau seront utilisés. Les points sont moyennés comme la valeur de ce pixel de bord . Cependant, après avoir parcouru toute l'image, l'image deviendra très floue , de sorte que la méthode de filtrage moyen risque de perdre trop de caractéristiques originales de l'image.
cv2.blur est la fonction de filtre moyenne fournie par opencv-python, comme suit :

img_blur = cv2.blur(img, (x, x))		# 均值滤波

2. Filtrage médian

Le principe du filtrage médian est de spécifier que les coordonnées ne contiennent pas de points de bord, et de prendre la médiane de tous les nombres du noyau comme valeur du point intermédiaire (le traitement des points de bord ici n'est qu'une méthode, qui ne représente pas le méthode utilisée par la fonction fournie par OpenCV, il est également possible d'utiliser la méthode de mise en miroir, ou d'utiliser tous les pixels restants du noyau pour effectuer un filtrage médian comme un filtrage moyen) .
La fonction de filtre médian fournie par cv2.medianBlur pour opencv-python est la suivante :

cv2.medianBlur(img, x)			# 中值滤波

3. Filtre gaussien

Utilisez le filtrage gaussien pour confirmer d'abord un noyau impair ( la taille de ce noyau doit être impaire, car seuls les noyaux impairs × impairs ont un point central, ce qui est une condition qui doit être satisfaite par le principe du filtrage gaussien. filtering ), s'il ne s'agit pas d'un noyau impair, une erreur sera signalée directement. L'erreur est la suivante.

cv2.error: (-215:Assertion failed) ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1 in function 'cv::createGaussianKernels'

Le principe du filtrage gaussien est de multiplier le tableau de même taille que le noyau gaussien par le noyau gaussien, puis de les additionner, et le nombre obtenu est la valeur du point central .
La fonction de filtre gaussien fournie par cv2.GaussianBlur pour opencv-python est la suivante :

cv2.GaussianBlur(img, (x, x), 0)	# 高斯滤波

4. Cas

Le code spécifique est le suivant :

import cv2  # 导入opencv库

if __name__ == '__main__':
    while True:
        img_g = cv2.imread('img/6.jpg', 0)    # 获取路径img/0.jpg的图像,图像类型为RGB图像
        img_g = cv2.resize(img_g, (0, 0), fx=0.5, fy=0.5)  # 改变图像shape

        img_blur = cv2.blur(img_g, (5, 5))  # 均值滤波
        img_medianBlur = cv2.medianBlur(img_g, 5)			# 中值滤波
        img_GaussianBlur = cv2.GaussianBlur(img_g, (5, 5), 0)  # 高斯滤波

        t1, img_g_bin = cv2.threshold(img_g, 170, 255, cv2.THRESH_BINARY)  # 二值化
        t2, img_blur_bin = cv2.threshold(img_blur, 170, 255, cv2.THRESH_BINARY)  # 二值化
        t3, img_medianBlur_bin = cv2.threshold(img_medianBlur, 170, 255, cv2.THRESH_BINARY)  # 二值化
        t4, img_GaussianBlur_bin = cv2.threshold(img_GaussianBlur, 170, 255, cv2.THRESH_BINARY)  # 二值化

        cv2.imshow("img_g", img_g)  # 显示RGB图像
        cv2.imshow("img_g_bin", img_g_bin)  # 显示二值化图像
        cv2.imshow("img_blur", img_blur)    # 显示均值滤波后的图像
        cv2.imshow("img_blur_bin", img_blur_bin)    # 显示均值滤波后的二值化图像
        cv2.imshow("img_medianBlur", img_medianBlur)    # 显示中值滤波后的图像
        cv2.imshow("img_medianBlur_bin", img_medianBlur_bin)    # 显示中值滤波后的二值化图像
        cv2.imshow("img_GaussianBlur", img_GaussianBlur)    # 显示高斯滤波后的图像
        cv2.imshow("img_GaussianBlur_bin", img_GaussianBlur_bin)    # 显示高斯滤波后的二值化图像

        cv2.waitKey(1)  # 等待时间

L'effet est le suivant :
insérer la description de l'image ici
concernant le choix de la méthode de filtrage, ma compréhension personnelle est que l'applicabilité et les performances du filtrage gaussien sont bonnes et que le filtrage gaussien peut être utilisé pour les exigences générales de réduction du bruit. Comme le montre la figure ci-dessus, si vous souhaitez supprimer certains points de bruit importants, l'effet du filtrage médian sera relativement faible. Au contraire, dans ce cas, prendre la valeur moyenne sera plus approprié que prendre la valeur médiane. Au contraire, lorsque les points de bruit sont très petits, le filtre médian peut avoir un bon effet et n'entraînera aucune conséquence de flou sur l'image originale. Au contraire, le filtre moyen éliminera de nombreuses caractéristiques de l'image. ne sont pas évidents ou lorsque la demande ne peut pas avoir des images trop floues, le filtrage moyen ne peut pas être utilisé.

Je suis étudiant et j'étudie actuellement. Cet article peut être considéré comme mes notes d'étude. Veuillez me corriger si je me trompe.

Je suppose que tu aimes

Origine blog.csdn.net/xztli/article/details/126175975
conseillé
Classement