2010-11-19 40 views
1

Il est nécessaire de sélectionner un nombre de points spécifié sur l'image (en fait, sur la partie de cette image). Les parties plus sombres de l'image sont plus importantes.Sélection de points sur les parties de l'image en fonction du poids de couleur

La manière la plus simple de le faire est de les sélectionner de manière aléatoire. Mais même en abandonnant les points utilisés, on termine généralement avec des points situés trop près des autres surtout quand on respecte les poids. Peut-être qu'après avoir sélectionné le point, le poids devrait être diminué dynamiquement? N'ai pas essayé.

J'ai remarqué que l'image originale avait trop de couleurs différentes, je voulais donc la lisser pour couper des couleurs similaires. Cependant convertir en niveaux de gris n'était pas suffisant.
J'ai utilisé les fonctions Emgu CV (wrapper OpenCV) pour binariser l'image. J'ai essayé de calculer le bassin versant, mais les zones calculées ne sont pas si faciles à séparer. Généralement, le bassin versant est une approche assez «non intuitive» pour détecter les endroits plus sombres. Simplement: Je voudrais marquer des points sur l'image à partir de parties plus sombres - les parties doivent être marquées plus fréquemment que les parties plus claires. Les points doivent être répartis sur un groupe de couleurs similaires pour éviter d'être empilés dans les endroits proches.

L'algorithme n'a pas besoin d'être précis. Il peut donner des résultats différents dans les prochaines itérations. Le nombre de points ne serait pas très important de 10 à 150-200.

Comment calculer le nombre spécifié de points dispersés sur l'image à partir des régions les plus sombres?

Pour visualiser ce que je veux dire, voir l'image ci-dessous. Il contient des points sélectionnés (qté ~ 20). Les parties les plus sombres sont sélectionnées. Les points ne doivent pas apparaître sur les mêmes emplacements après la prochaine itération. Mais ce que je veux, c'est choisir des points sur des régions plus légères quand le nombre d'entre elles serait plus élevé.

Bien sûr, pour des images différentes, le nombre de points nécessaires pour sortir de l'obscurité serait différent.

Picture after points selection

+2

Il manque des éléments clés dans votre question. Vous avez une contradiction entre uniformément/aléatoire et "parties plus sombres pondérées plus haut". Vous devez l'effacer. À quel point une zone sombre devrait-elle «valoir»? Un seul point noir dans un champ blanc est-il une "zone sombre"? Qu'est-ce que cela a à voir avec la réduction du nombre de couleurs à utiliser pour choisir des points aléatoires? –

+0

J'ai apporté quelques éclaircissements sur ce que je veux dire. – peo

+1

Pouvez-vous montrer un exemple de fichier d'entrée ainsi que le résultat attendu? – bjoernz

Répondre

0

Si je comprends bien votre question, vous avez besoin d'une liste de points sur une image. La liste doit contenir plusieurs points des régions noires et quelques points des régions blanches.

Une approche simple - Itérer à travers chaque pixel. Stockez la valeur du pixel courant dans une variable 's', puis:

if(s < 64) // Darker 
    if(rand() % 5 == 1) 
     // Add to list 
else  // White 
    if(rand() % 25 == 1) 
     // Add to list 
+0

Les images sont différentes. Il s'agit de régler l'obscurité de manière dynamique. – peo

+0

Vous pouvez prendre la moyenne d'un voisinage de 5x5 (ou plus) et l'utiliser pour calculer le seuil d'obscurité. –