2011-04-13 5 views
2

J'utilise le cvThresholding() localisé de la bibliothèque OpenCV pour effectuer binarisation en utilisant la méthode de seuillage Otsu. Parfois l'approche échoue ce qui est compréhensible puisque Otsu calcule un seul seuil pour l'image entière. Pour améliorer les résultats, j'ai décidé de décomposer l'image en grille puis d'effectuer une binarisation Otsu sur chaque section de la grille. Les résultats semblent maintenant encourageants, mais le partitionnement basé sur la grille rend l'image binaire de sortie discontinue dans la nature, en particulier sur les bords de la grille. y a-il un moyen de résoudre cela?Mettre en œuvre une routine Otsu binarisation

Veuillez noter que cette approche fonctionne le mieux pour moi. Je suis conscient de l'option de seuillage adaptatif disponible dans opencv et cela ne semble pas fonctionner pour moi car il est trop sensible par rapport à l'approche de binarisation d'Otsu.

En attente d'une réponse. Merci d'avance.

+0

Salut @Saurabh Gandhi essaie déclaration suivante "cvThreshold (Img1, Img1, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);" Img1 est l'image 1-canal 32F, mais il lance continuellement l'excception. Pourriez-vous m'aider . pLzzzz – krishna

Répondre

3

Simplest serait probablement interpoler les seuils entre les centres des grilles. Bien que l'image de seuil soit discontinue (en gradient, pas en magnitude), elle est moins susceptible d'apparaître dans le résultat final.

3

si vous avez essayé fenêtre mobile au lieu de griding? Par exemple, pour chaque pixel, binariser en fonction de la valeur de seuil obtenue pour un patch 5x5 ou 7x7 centré sur ce pixel (avec un habillage approprié sur les bords).

une fenêtre mobile va faire le changement de seuil graduellement et en continu à travers l'image.

+0

Cela semble très coûteux en termes de calcul pour chaque pixel de l'image. Cela dit, je ne peux pas penser à quelque chose de mieux pour le moment. – misha

Questions connexes