Isolez la partie non floue de l'image masquée

10

J'ai une image prise par un appareil photo de téléphone portable en mettant l'accent sur une partie de celui-ci, disons un visage ou autre chose. Je veux savoir - approximativement - où se trouve le domaine ciblé. Par exemple, une boîte englobante autour de la zone focalisée. exemple : Original Après la détection

Humam Helfawi
la source

Réponses:

7

En général, il s'agit d'un problème de segmentation d'image ( http://en.wikipedia.org/wiki/Image_segmentation ) dans lequel vous essayez d'isoler les zones focalisées vers les régions non focalisées de l'image.

Les lentilles optiques sont de toute façon équivalentes aux filtres passe-bas et l'effet d'un filtre passe-bas sur un signal est de le lisser en limitant le contenu de fréquence plus élevée.

En traitement d'image numérique, les basses fréquences correspondent aux gros objets (forme générale) et les hautes fréquences correspondent aux petits objets (détails).

Par conséquent, pour isoler la zone mise au point, vous pouvez rechercher des zones dont l'écart type est supérieur à celui des zones floues qui seraient à un écart type inférieur en raison de l'opération de lissage de l'objectif flou.

M×N

M×N

Dans le cas de l'image dans votre message, l'histogramme est susceptible de présenter deux modes. Un correspondant à des valeurs relativement élevées d'écart type (zone focalisée) et un correspondant à des valeurs relativement faibles d'écart type (zones floues).

Vous pouvez ensuite positionner un seuil, par exemple juste entre les deux modes pour établir un critère entre vos régions focalisées et non focalisées puis sélectionner tous les "patchs" (ou zones de fenêtre MxN) dont l'écart-type est supérieur à votre seuil. (Pour plus d'informations, veuillez consulter: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

Cela isolera pour vous les parties focalisées de l'image.

J'espère que cela t'aides.

A_A
la source
Je vais faire une lecture approfondie de votre réponse et revenir avec un feed-back, Merci beaucoup
Humam Helfawi
Merci beaucoup, grande et détaillée réponse, je vais partager la mise en œuvre si j'ai obtenu de bons résultats en utilisant opencv, merci encore
Humam Helfawi
Au fait, est-ce qu'un gris représentatif de l'image est suffisant ou dois-je traiter chaque canal?
Humam Helfawi
Heureux que vous l'ayez trouvé utile. Travailler en niveaux de gris fonctionnerait très bien pour la discrimination entre les zones floues et les zones focalisées, mais l'inclusion d'informations supplémentaires sur les couleurs pourrait vous aider à prescrire des zones plus complexes (par exemple, suivre la zone d'un visage dans un portrait ou isoler uniquement la fleur dans l'image dans votre message).
A_A
La question a été modifiée dans sa forme d'origine après la discussion sur: meta.dsp.stackexchange.com/questions/1337/… @ vast-academician Veuillez ajouter vos commentaires en tant que réponse distincte. La partie principale a été conservée sur: pastebin.com/kjCC1wM6
A_A
5

Voici une approche plus simple, qui n'implique pas d'analyse de fenêtre coulissante.

  • Convertissez votre image en niveaux de gris (ce n'est pas obligatoire, mais je suppose que vous n'avez qu'un seul canal pour plus de clarté)

  • Calculez le gradient dans les deux directions

  • Calculer la magnitude (ou juste mettre le gradient au carré)

  • Additionner les deux images de dégradé dans les deux directions

Comme cela a déjà été dit, la partie focalisée de l'image aura des fréquences plus élevées que la zone non focalisée. À partir de la sommation, vous vous retrouverez avec deux projections, où il y a beaucoup de variations (valeurs plus élevées) dans la partie où l'objet focalisé est placé dans cette direction. Vous pouvez maintenant effectuer les opérations suivantes:

  • Déterminez le point de début et de fin de ces valeurs supérieures. Vous pouvez utiliser un seuil simple (par exemple 0,7 * valeur_maximale) ou lisser les profils, prendre la dérivée seconde et vérifier les valeurs les plus élevées.

  • Les positions Start / Stop de l'étape précédente vous donnent les positions des pixels dans les deux directions où placer votre rectangle indiquant la zone de netteté.

M529
la source