Suite

Calculer la couleur de l'objet afin qu'aucun objet adjacent ne se répète

Calculer la couleur de l'objet afin qu'aucun objet adjacent ne se répète


J'essaie d'attribuer l'une des 16 couleurs aux objets de la carte (par exemple, les comtés, les États, les codes postaux, etc.) afin qu'aucun deux objets adjacents ne partagent la même couleur.

Je vois des tonnes d'articles en ligne sur la "coloration des bords" et le "théorème des quatre couleurs", mais je n'arrive pas à trouver un moyen d'appliquer ces théorèmes en tant qu'algorithme dans PostgreSQL/PostGIS (ou toute application pratique, d'ailleurs) .

Je suis sûr à 100% que c'est un problème résolu, mais comme Google ne révèle pas de réponse, je suppose que je suis trop ignorant sur ce sujet pour poser la bonne question.

Quelqu'un peut me diriger dans la bonne direction?


J'ai eu de la chance en utilisant l'algorithme à 6 couleurs décrit dans l'introduction de Deux algorithmes à temps linéaire pour la cinq coloration d'un graphique planaire. Bien qu'il soit certainement possible de colorer un graphique en utilisant moins de couleurs, cela peut ne pas paraître mieux que d'utiliser 5 ou 6.

ALGORITHME 6 COULEURS.

Étant donné un m-graphique planaire des sommets g sous forme de liste d'adjacence, cet algorithme détermine une 6-coloration de g.

Étape 1. Établir des listes de diplômes.

Pour chaque j0 < j < n-1, forment une liste doublement chaînée de tous les sommets de g de diplôme j.

Étape 2. Étiquetez les sommets au plus petit degré en dernier.

Pour i=n, n-1, n-2,… , 1, désignent le premier sommet du non-vide j-liste des degrés des plus petits j comme sommet vje.

Supprimer vje de la liste des j degrés.

Pour chaque sommet v' qui était adjacent à vje dans g et reste dans une liste de degrés, disons j'ai, effacer v' du j'ai liste des diplômes et insérer v' dans le j' - 1 liste des diplômes.

Étape 3. Colorez les sommets.

Pour i =1,2,… ,n, affecter un sommet vje la plus petite valeur de couleur (qui doit être un nombre entier compris entre un et six) n'apparaissant pas sur les sommets adjacents à vje qui ont déjà été colorées.


Je suis sûr que cette fonction est incroyablement inefficace (sans parler du fait qu'elle est très mal codée - elle a été écrite comme une implémentation rapide et sale "unique), mais en voici une dont les résultats fonctionnent assez bien pour moi :

CRÉER OU REMPLACER LA FONCTION public.calc_colors( tbl text, unique_field text, around_style text, search_distance real DEFAULT 0) RETOURNE SETOF record AS $BODY$ DECLARE first_vertex text; r ENREGISTREMENT ; next_color INTEGER; max_used_color ENTIER ; couleurs_disponibles ENTIER ; texte suivant_sommet ; créer_contig TEXTE ; color_string TEXTE; COMMENCER --trouver les voisins IF style_voisin = 'no_corners' ALORS create_contig = 'CREATE TEMP TABLE contig_temp ON COMMIT DROP AS SELECT p1'.' || quote_ident(unique_field) || '::text AS c1, p1.geom as geom, p2.' || quote_ident(unique_field) || '::texte AS c2 FROM ' || tbl || 'p1 CROSS JOIN' || tbl || ' p2 WHERE ( ST_Relate( p1.geom, p2.geom,"2********") OU ST_Relate( p1.geom, p2.geom,"****1****")) ET p1.' || quote_ident(unique_field) || ' != p2.' || quote_ident(unique_field); ELSIF voisin_style = 'within' THEN create_contig = 'CREATE TEMP TABLE contig_temp ON COMMIT DROP AS SELECT p1.' || quote_ident(unique_field) || '::text AS c1, p1.geom as geom, p2.' || quote_ident(unique_field) || '::texte AS c2 FROM ' || à savoir || 'p1 CROSS JOIN' || à savoir || ' p2 WHERE (ST_Intersects( p1.geom, p2.geom) Ou ST_DWithin( st_envelope(p1.geom), st_envelope(p2.geom), ' || search_distance || ')) ET p1.' || quote_ident(unique_field) || ' != p2.' || quote_ident(unique_field); ELSE create_contig = 'CREATE TEMP TABLE contig_temp ON COMMIT DROP AS SELECT p1.' || quote_ident(unique_field) || '::text AS c1, p1.geom as geom, p2.' || quote_ident(unique_field) || '::texte AS c2 FROM ' || à savoir || 'p1 CROSS JOIN' || tbl || ' p2 O ST_Intersects( p1.geom, p2.geom) ET p1.' || quote_ident(unique_field) || ' != p2.' || quote_ident(unique_field); FIN SI; EXÉCUTER create_contig; CREATE INDEX sidx_contig_temp ON contig_temp USING gist (geom); CREATE TEMP TABLE vertex_degree_temp ON COMMIT DROP AS SELECT c1, count(*) as around_count FROM contig_temp GROUP BY c1 ORDER BY count(*) DESC, c1; CRÉER UN INDEX dv_tmp_idx ON vertex_degree_temp (c1) ; --color first vertex, qui est le sommet avec le plus grand nombre de voisins SELECT c1 INTO first_vertex FROM vertex_degree_temp LIMIT 1; CREATE TEMP TABLE vertex_colors_temp ON COMMIT DROP AS SELECT first_vertex c1, 1::int color_idx; CRÉER UN INDEX vc_tmp_idx ON vertex_degree_temp (c1) ; max_used_color = 1 ; LOOP --trouver le sommet suivant, qui est le sommet avec le plus grand nombre de couleurs distinctes dans les voisins --pour les liens, choisissez le sommet avec le plus grand nombre de voisins SELECT d.c1 INTO next_vertex FROM ( SELECT DISTINCT d.c1, d.related_count, c. color_idx FROM vertex_degree_temp d, contig_temp n LEFT JOIN vertex_colors_temp c ON (c.c1 = n.c2) O d.c1 NOT IN (SELECT c1 FROM vertex_colors_temp) ET d.c1 = n.c1 ) d GROUP BY d.c1, d .neighbor_count ORDER BY count(d.color_idx) DESC, around_count DESC LIMIT 1; EXIT LORSQUE next_vertex EST NULL ; --trouver la couleur disponible la moins utilisée pour le sommet DROP TABLE IF EXISTS used_colors_temp; CREATE TEMP TABLE used_colors_temp AS SELECT * FROM (SELECT generate_series(1,max_used_color) a ) seq WHERE a NOT IN (SELECT c.color_idx FROM contig_temp n, vertex_colors_temp c WHERE (c.c1 = n.c2) AND n.c1 = next_vertex ORDRE PAR color_idx); SELECT count(*) FROM used_colors_temp DANS available_colors ; SI couleurs_disponibles = 0 ALORS couleur_suivante = couleur_max_utilisée + 1 ; max_used_color = next_color; ELSE --choisir la couleur avec le plus petit nombre, mais la distance la plus éloignée de la géométrie actuelle .c1, u.color_idx, c.geom FROM vertex_colors_temp u LEFT JOIN contig_temp c ON u.c1 = c.c1 WHERE color_idx IN (SELECT a FROM used_colors_temp) ) available WHERE c.c1 = next_vertex) d GROUP BY d.color_idx ORDER BY min(dist) DESC LIMIT 1 INTO next_color; FIN SI; --insert INSERT INTO vertex_colors_temp (c1, color_idx) VALUES (next_vertex, next_color); max_used_color = LE PLUS GRAND(max_used_color, next_color); FIN DE BOUCLE ; RETURN QUERY SELECT * FROM vertex_colors_temp; FINIR; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 LIGNES 1000 ;

Il est utilisé en le joignant à la table existante, par exemple :

SELECT l.id, colours.color_idx, l.geom FROM public.localities l LEFT JOIN public.calc_colors('public.localities'::text, 'id'::text, 'within'::text, 2000::real ) colours(id text, color_idx integer) ON colours.id::bigint = l.id

(Encore une fois, excuses pour la syntaxe horrible… c'était une implémentation jetable !)

Cette fonction renverra un numéro de couleur pour chaque caractéristique de la table spécifiée comme premier argument passé à la fonction. Le deuxième argument est une colonne qui identifie de manière unique chaque caractéristique (utilisée pour joindre les couleurs à la table d'origine). La magie réside dans les 3e et 4e arguments - ceux-ci contrôlent la façon dont les couleurs sont attribuées. Le 3ème argument "voisin_style" peut être soit :

  • vide, ce qui signifie que les couleurs seront attribuées de manière à ce qu'aucun sécante les fonctionnalités partagent le même numéro de couleur
  • ou 'no_corners', ce qui signifie que non sécante ou alors émouvant les fonctionnalités partageront la même couleur
  • ou 'à l'intérieur', auquel cas le 4ème paramètre est utilisé pour spécifier une tolérance de distance. Aucune fonctionnalité dans cette distance les uns des autres partageront la même couleur (cela peut être utile si les éléments se touchent presque et que vous ne voulez pas qu'ils partagent la même couleur).

L'algorithme tentera d'attribuer des couleurs de sorte que le nombre total d'entités avec un numéro de couleur donné soit à peu près égal et que les couleurs soient à peu près uniformément réparties sur les limites géographiques de la table d'entrée.

Toute suggestion d'amélioration de ce script serait grandement appréciée !


Répondre à ma propre question ici dans l'espoir que cela aide les autres (ou mon futur moi). Dans les semaines qui se sont écoulées depuis que j'ai posté la question, je n'ai pas pu trouver de solution élégante à ce problème qui puisse être réalisée de manière algorithmique dans PostgreSQL. Au lieu de cela, j'ai divisé la tâche en parties constitutives et je l'ai plus ou moins brutalement forcée.

Pour les besoins de cette procédure pas à pas, j'utiliserai les codes postaux comme exemple, mais cette approche a tout aussi bien fonctionné pour les comtés, les villes, les États et les pays. Et plutôt que de publier du code très spécifique au système qui ne serait pas réutilisable, je vais juste expliquer mon approche.

1) J'ai créé une table relationnelle provisoire qui contenait les identifiants de chaque ZIP voisin. (par exemple, 12345 est adjacent à 12346, 12347 et 12348). Pour déterminer la contiguïté, j'ai utilisé ST_Intersects(). (Voir les notes ci-dessous sur les villes). Pour accélérer les choses, j'aurais pu pré-filtrer la requête pour limiter la recherche de ZIP adjacents à une certaine distance, mais j'ai découvert que je pouvais tout traiter pendant une pause-café tolérable pour cette exécution unique.

2) J'ai ensuite créé un script PHP qui traitait chaque ZIP en a) choisissant une couleur aléatoire dans un pool et b) en cherchant si l'un des ZIP adjacents via #1 ci-dessus avait déjà utilisé cette couleur. Si la couleur avait été utilisée, j'ai parcouru les couleurs aléatoires de la piscine jusqu'à ce que je trouve une couleur fraîche et inutilisée.

Remarques:

  • Pour mes valeurs de couleur, j'ai simplement utilisé une plage int de 0 à 15 dans le premier lot et de 0 à 7 dans une deuxième tentative raffinée. Cela facilite beaucoup la sélection d'une valeur aléatoire (par exemple, rand(0,7)), et offre plus de flexibilité dans le style sur toute la ligne. Dans mon cas, j'utilise cette valeur int avec des règles conditionnelles dans CartoCSS pour styliser les valeurs de couleur réelles à la volée.
  • Je n'ai trouvé qu'un seul code postal et trois comtés qui avaient plus de 7 voisins (épuisant ainsi le pool de couleurs disponible dans mon ensemble de 8 couleurs (c'étaient des formes extraordinairement hautes avec beaucoup de voisins le long de chaque côté si vous vous demandez comment c'est possible ). Pour empêcher le script dans #2 de boucler à l'infini, j'ai simplement claqué la dernière valeur aléatoire choisie et j'ai vécu avec la couleur dupliquée. Ce problème ne s'est évidemment pas produit dans le pool de 16 couleurs. J'ai lu que les 50 États américains peut être fait avec aussi peu que 4 couleurs, même si je n'ai pas essayé.
  • Les villes sont un peu plus délicates car la plupart ne se heurtent pas à une autre. Ainsi, ST_Intersects() ne fonctionnera pas. Au lieu de cela, j'ai défini la contiguïté comme étant à une certaine distance courte (trop longue et vous aurez trop de voisins). Bien que cette approche ne crée pas une solution mathématiquement pure, elle fonctionne suffisamment bien dans la pratique pour tromper l'œil lors du dessin de la carte.
  • Les temps d'exécution pour traiter les ZIP et les villes, respectivement, avec le script n ° 2 ci-dessus étaient d'environ une heure sur ma plate-forme. Assurez-vous que votre valeur max_execution_time dans votre php.ini est définie pour permettre un travail très long.

J'espère que ceci vous aide. N'hésitez pas à me contacter pour toute question ou clarification.


Informations spatiales

Les informations spatiales sont souvent communiquées verbalement, en langage naturel comme l'anglais. Les gens donnent et reçoivent des indications verbales sur les itinéraires, lisent les descriptions spatiales contenues dans les histoires et interagissent de plus en plus avec les systèmes informatiques via des requêtes verbales. Il y a deux caractéristiques notables de la façon dont le langage exprime l'information spatiale. La première est que le langage exprime principalement des informations quantitatives non quantitatives ou imprécises (« floues ») sur l'espace. Les déclarations sur les connexions et l'emplacement approximatif sont plus importantes que les déclarations précises. Par exemple, les gens disent « tournez à gauche à la station-service » plutôt que « tournez à 80° après avoir parcouru 0,6 mile. » Une grande précision est généralement inutile ou même déroutante. Une deuxième caractéristique est que divers aspects du contexte de la communication sont critiques dans l'interprétation du langage spatial. Le contexte est fourni par la connaissance de qui parle, où ils se trouvent, les caractéristiques physiques de la situation, le sujet de conversation précédent, etc. « Le vélo est près de l'église » est généralement compris différemment de « le Wisconsin est près du Michigan ».


Introduction

Les systèmes cyberphysiques (CPS), en tant que processus informatique et processus physique d'unité, sont l'informatique, la communication et le contrôle intégrés dans l'une des prochaines générations de systèmes intelligents. Il interagit avec le processus physique via l'interface d'interaction homme-machine et utilise l'espace réseau pour manipuler une entité physique de manière distante, fiable, en temps réel, sécurisée et coopérative.

Le CPS comprend la future sensibilisation à l'environnement omniprésent, l'informatique embarquée, la communication réseau et l'ingénierie des systèmes de contrôle de réseau qui permettent au système physique de disposer de capacités informatiques, de communication, de contrôle précis, de collaboration à distance et autonomes. Il se concentre sur les ressources informatiques et les ressources physiques en étroite intégration et coordination, principalement pour certains systèmes intelligents tels que les robots et la navigation intelligente. À l'heure actuelle, le système de physique de l'information est encore un domaine de recherche relativement nouveau.

Avec le développement continu de la technologie informatique, de la technologie des réseaux et de la théorie mathématique, la recherche sur le traitement d'images numériques dans les systèmes en temps réel, qui est devenu un élément important du CPS, a été largement appliquée dans divers domaines, tels que la biomédecine, la télédétection par satellite, et la communication d'images. Dans le cadre du traitement d'image, la segmentation d'image joue un rôle important. La segmentation d'images dans les systèmes en temps réel est une technologie et un processus qui divise l'image en un certain nombre de sections spécifiques et uniques et extrait la section intéressée. La segmentation d'images vidéo est un enjeu important dans le domaine de la vision par ordinateur et aussi un puzzle classique [1, 2]. Ses recherches ont été appliquées aux systèmes d'identification des visages, aux systèmes d'identification des empreintes digitales, aux systèmes de détection et d'identification des incendies, à la vision industrielle et à l'imagerie médicale, etc. Comme tout le monde le sait, la tomodensitométrie (TDM) est largement utilisée dans les hôpitaux, qui utilise le résultat de la segmentation des images pour aider à diagnostiquer efficacement et rapidement les patients en temps réel. Aujourd'hui, le système d'identification des visages et la vision artificielle sont la préoccupation principale des chercheurs.

Il existe de nombreux algorithmes de segmentation d'images vidéo de différentes applications. Mais jusqu'à présent, il n'y a pas de solution ou de norme uniforme pour la segmentation d'images vidéo, et il n'y a pas non plus de théorie complète pour guider la sélection de la méthode de segmentation appropriée en fonction des caractéristiques de l'image. Dans des conditions normales, afin de résoudre plus efficacement un problème spécifique dans le domaine de la segmentation d'images, il est combiné avec la connaissance des domaines concernés.

Selon le niveau de gris de l'image, la segmentation d'image peut être divisée en segmentation d'image en échelle de gris et segmentation d'image en couleur. Par rapport aux images en niveaux de gris, les images en couleur incluent non seulement la luminosité mais également les informations de couleur, telles que la teinte et la saturation. Dans de nombreux cas, nous ne pouvons pas extraire les informations cibles de l'image en utilisant simplement les informations de gris alors que l'œil humain peut reconnaître des milliers de couleurs, nous pouvons donc obtenir rapidement la segmentation avec les informations de couleur [3, 4]. Il est donc essentiel d'étudier la segmentation de l'image couleur qui a de larges perspectives.

Il existe de nombreuses méthodes de division dans la segmentation d'images couleur, telles que la méthode basée sur le seuil d'histogramme, les méthodes basées sur les régions et les méthodes de segmentation de clustering floue et de détection de contours [5–8]. Ces méthodes combinent également différents espaces colorimétriques selon les besoins de segmentation [9, 10]. Par conséquent, dans le processus de segmentation d'images couleur, nous devons d'abord déterminer l'espace colorimétrique, puis sélectionner la méthode de segmentation appropriée.

L'image est très vulnérable aux effets de la lumière et du bruit, donc non seulement le bruit mais aussi les changements de lumière doivent être pris en considération lors de la segmentation. L'apparence de la couleur de l'image change lorsque la lumière est modifiée. Cela entraînera une inexactitude de la segmentation en utilisant uniquement les informations de couleur, quelles que soient les informations de luminosité. Afin d'obtenir la bonne segmentation, il utilise simultanément les informations de couleur et les informations de luminosité. Dans cet article, une nouvelle méthode de segmentation d'image est proposée qui peut segmenter le premier plan et l'arrière-plan dans l'espace colorimétrique RVB en utilisant les informations de couleur et les informations de luminosité. Le résultat de segmentation de cette méthode est meilleur.

Avec le développement de la production industrielle moderne vers la vitesse élevée et la direction automatique, la reconnaissance des couleurs a été largement utilisée dans divers domaines de la détection industrielle et du contrôle automatique. Et le travail d'identification des couleurs qui est mené par l'œil humain dans la production à long terme a été remplacé par de plus en plus de capteurs de couleurs. Le capteur de couleur détecte la couleur en comparant la couleur de l'objet avec la couleur de référence, et s'ils sont cohérents dans une certaine plage d'erreur, puis génèrent les résultats de la détection. Le capteur de couleur peut être appliqué dans de nombreux domaines, tels que la surveillance du processus de production et de la qualité des produits dans l'industrie [11] la réalisation de la copie couleur fidèle sans être affectée par la température ambiante, l'humidité, l'influence du papier et du toner dans les aspects de reproduction électronique une maladie indicateur pour étudier une maladie dans le contrôle médical et automatique dans la détection de deux couleurs d'étiquettes adjacentes d'un papier et compter automatiquement le nombre de toutes sortes de couleurs par compteur automatique dans l'emballage de la marchandise [12]. Il existe de nombreux types de capteurs de couleur à ce jour. Le capteur de couleur typique est le capteur de couleur TCS230 [13], le dernier capteur de couleur de la société TAOS. Il peut reconnaître et détecter les couleurs et possède de nombreuses nouvelles fonctionnalités intéressantes par rapport aux autres capteurs de couleur. Il convient aux applications de mesure par colorimètre, telles que le diagnostic médical, l'impression couleur, l'étalonnage d'écrans couleur d'ordinateur et les cosmétiques, la peinture, le textile et le contrôle de processus des matériaux d'impression.

Selon le principe de fonctionnement du capteur de couleur et de la méthode de segmentation d'image, nous allons concevoir une fonction de capteur de couleur similaire en utilisant la caractéristique d'encre thermique dans cet article. La caractéristique de l'encre thermique est que sa valeur de couleur changera en temps réel à mesure que la température change. Par conséquent, les résultats de segmentation de l'encre thermique peuvent être utilisés comme capteur de couleur en temps réel. Nous obtenons les informations de couleur de la zone de segmentation (encre thermique) via la valeur de correction de la couleur de l'encre et la comparaison de la couleur standard, la bonne valeur de couleur est conclue, et enfin, la température est sortie par la pertinence de la couleur de l'encre thermique et Température. Cette conception peut être utilisée pour mesurer la température intérieure, extérieure et les étiquettes des aliments, etc. Elle peut également être utilisée pour contrôler la température des plantes de serre. Nous identifions le changement de température grâce à un suivi en temps réel du changement de couleur, ajustant ainsi la température pour obtenir un meilleur rendement. Cette méthode est en temps réel et rapide et sans plusieurs nœuds de capteurs.

Le reste du papier est organisé comme suit. La section 2 analyse l'espace colorimétrique, la capture d'images vidéo, la reconnaissance et la segmentation, les algorithmes existants et le capteur de couleur. La section 3 décrit la méthode proposée et la correction des couleurs. La section 4 analyse les résultats expérimentaux de la méthode proposée et propose son application. La section 5 tire la conclusion et donne enfin les suggestions.


Les références

Suprit, D.B., Abhijeet, V.N. : Détection et localisation des anomalies de la foule à l'aide d'un histogramme de magnitude et de quantité de mouvement. Vis. Calcul. 36(3), 609–620 (2020)

Lin Feng, Y.L., Zan, L., Meng, Z., Feilong, W., Shenglan, L. : hachage de sélection de bits discriminant dans la reconnaissance d'objets basée sur RVB pour la vision robotique. Automatisation de l'assemblage (2019)

Bengler, K., Dietmayer, K., Farber, B., Maurer, M., Stiller, C., Winner, H. : Trois décennies de systèmes d'aide à la conduite : bilan et perspectives futures. IEEE Intelligence. Transp. Syst. Magaz. 6(4), 6–22 (2014)

Pang, Y., Yuan, Y., Li, X., Pan, J. : Détection efficace des porcs humains. Processus de signal. 91(4), 773–781 (2011)

Chengbin, Z., Huadong, M., Anlong, M. : Détection humaine rapide à l'aide de mi-svm et d'une cascade de fonctionnalités hog-lbp. Dans : 2010 IEEE International Conference on Image Processing, pp. 3845-3848. IEEE (2010)

Navneet Dalal, B.T. : Histogrammes de gradients orientés pour la détection humaine. En 2005, IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'05), vol. 1, p. 886-893. IEEE (2005)

Meyer, D., Leisch, F., Hornik, K. : La machine à vecteurs de support en cours de test. Neuroinformatique 55(1–2), 169–186 (2003)

Zhong-Qiu, Z., Haiman, B., Donghui, H., Wenjuan, C., Hervé, G. : Détection des piétons basée sur le r-cnn rapide et la normalisation par lots. Dans : Conférence internationale sur l'informatique intelligente, pp. 735-746. Springer (2017)

Shaoqing, R., Kaiming, H., Ross, G., Jian, S. : Faster r-cnn : Vers une détection d'objets en temps réel avec des réseaux de proposition de région. Dans : Avancées dans les systèmes de traitement de l'information neuronale, pp. 91-99 (2015)

Yeong-Hyeon, B., Keun-Chang, K. : Une comparaison des performances de détection de piétons à l'aide de rcnn et acf plus rapides. Dans : 2017 6th IIAI International Congress on Advanced Applied Informatics (IIAI-AAI), pp. 858-863. IEEE (2017)

Kaiming, H., Géorgie, G., Piotr Dollár, R.G. : Masque r-cnn. Dans : Actes de la conférence internationale IEEE sur la vision par ordinateur, pp. 2961-2969 (2017)

Joseph, R., Santosh, D., Ross, G., Ali, F. : Vous ne regardez qu'une seule fois : Détection unifiée d'objets en temps réel. Dans Actes de la conférence IEEE sur la vision par ordinateur et la reconnaissance de formes, pp. 779-788 (2016)

Wei, L., Dragomir, A., Dumitru, E., Christian, S., Scott, R., Cheng-Yang, F., Alexander, C.B. : Ssd : Détecteur multiboîte à un coup. Dans : Conférence européenne sur la vision par ordinateur, pp. 21-37. Springer (2016)

Alexander, W., Mohammad, J.S., Francis, L., Brendan, C. : Tiny ssd : Un petit réseau de neurones à convolution profonde à détection unique pour la détection d'objets embarqués en temps réel. Dans : 2018 15th Conference on Computer and Robot Vision (CRV), pp. 95-101. IEEE (2018)

Chong, L., Rong, W., Jinze, L., Linyu, F. : Détection de visage basée sur yolov3. Dans : Tendances récentes de l'informatique, de la communication et des appareils intelligents, pp. 277-284. Springer (2020)

Ajit, J., Prerana, M., Vinay, K., Brejesh, L. : Suivi aérien multi-objets par détection à l'aide de réseaux d'associations profondes. Dans : 2020 Conférence nationale sur les communications (NCC), pp. 1–6. IEEE (2020)

Tsung-Yi, L., Michael, M., Serge, B., James, H., Pietro, P., Deva, R., Piotr, D., Lawrence, Z. : Microsoft coco : Objets communs en contexte. Dans Conférence européenne sur la vision par ordinateur, pp. 740-755. Springer (2014)

Zia-ur, R., Daniel, J.J., Glenn, A.W. : traitement Retinex pour l'amélioration automatique de l'image. J. Electron. Imag. 13(1), 100–111 (2004)

Zietkiewicz, E., Rafalski, A., Labuda, D. : Empreintes génétiques du génome par amplification par réaction en chaîne par polymérase ancrée à répétition de séquence simple (ssr). Génomique 20(2), 176–183 (1994)

Zhang, Z. : Une nouvelle technique flexible pour l'étalonnage des caméras. IEEE Trans. Modèle Anal. Mach. Informer. 22(11), 1330–1334 (2000)

Qin, Y., Luo, F., Li, M. : Une méthode d'amélioration de l'image médicale basée sur un algorithme retinex multi-échelle amélioré. J. Méd. Imag. Santé Inf. 10(1), 152–157 (2020)

Tian, ​​Y., Yang, G., Wang, Z., Wang, H., Li, E., Liang, Z. : Détection des pommes à différents stades de croissance dans les vergers à l'aide du modèle amélioré yolo-v3. Calcul. Électron. Agric. 157, 417–426 (2019)

Mujtaba, A., Jie, Y., Jiang, H., Pourya, S., Xiangjian, H. : modèle basé sur la fusion de fonctionnalités multi-images pour la détection de la violence. Vis. Calcul. p. 1–17 (2020)

Tsung-Yi, L., Piotr Dollár, R.G., Kaiming, H., Bharath, H., Serge, B. : Réseaux pyramidaux de fonctionnalités pour la détection d'objets. Dans : Actes de la conférence IEEE sur la vision par ordinateur et la reconnaissance de formes, pp. 2117-2125 (2017)

John, A.H., Manchek, A.W. : Algorithm as 136 : A k-means clustering algorithm. J. Royal Stat. Soc. Sér. c 28(1), 100–108 (1979)

Zitnick, C.L., Piotr, D. : Edge boxes : Localiser les propositions d'objets à partir des bords. Dans : Conférence européenne sur la vision par ordinateur, pp. 391-405. Springer (2014)

Danielsson, P.-E. : Cartographie des distances euclidiennes. Graphe informatique. Processus d'image. 14(3), 227–248 (1980)

Vishnu, G.N., Guruprasad, K.R. : Couverture multi-robots utilisant le partitionnement de voronoi basé sur la distance géodésique. Dans : Systèmes d'instrumentation de contrôle, pp. 59-66. Springer (2020)


Analyses de résultats et index

La relation entre la quantité d'exploration pendant la phase de familiarisation et la mémoire de reconnaissance d'objet ultérieure peut être évaluée avec le test NOR. Le temps passé par l'animal à explorer des objets individuels pendant la phase de familiarisation Le temps total passé par l'animal à explorer les deux objets pendant la phase de test et d'entraînement et l'indice de discrimination, c'est-à-dire la différence entre le temps passé à explorer des objets nouveaux et familiers, pendant la phase de test peut être pris en considération.

Il existe deux mesures du comportement discriminatoire selon Ennaceur et Delacour (1988). La première mesure ( 1) pour la phase d'accoutumance est la différence de temps d'exploration pour les objets nouveaux par rapport aux objets familiers, c'est-à-dire le temps d'exploration consacré à l'objet nouveau (T N) moins le temps consacré à l'objet familier (T F), [ 1 = (T − T F)]. La deuxième mesure, Indice de discrimination (DI), permet la discrimination entre le roman et les objets familiers, c'est-à-dire qu'il utilise la différence de temps d'exploration pour l'objet familier, mais en divisant ensuite cette valeur par la quantité totale d'exploration du roman et des objets familiers [DI =&# x000a0(T N  − T F)/(T N + T F)]. Ce résultat peut varier entre +1 et 𢄡, où un score positif indique plus de temps passé avec le nouvel objet, un score négatif indique plus de temps passé avec l'objet familier et un score zéro indique une préférence nulle (Aggleton et al. 2010 Aubele et al. 2008 Burke et al. 2010 Oliveira et al. 2010 Silvers et al. 2007). Le DI est également exprimé comme le rapport du temps total passé à explorer les deux objets, ce qui permet d'ajuster toute différence dans le temps total d'exploration (Broadbent et al. 2010). De même, cette mesure peut être appliquée lorsque les deux objets sont identiques, en phase de familiarisation, mais ici la formule mathématique sera DI = (T T L)/(T R + T L), où T R représente le temps d'exploration consacré au bon échantillon et TL représente le temps d'exploration consacré à l'échantillon de gauche (Aubele et al. 2008). Ces deux mesures ( 1 et DI) ne sont pas indépendants cependant, ils ne peuvent pas être considérés comme équivalents et ils sont combinés comme deux estimations du processus de reconnaissance.

Selon Ennaceur et Delacour (1988), un Indice d'habituation globale peut également être déterminé, en comparant le temps total passé à explorer les deux objets pendant la phase de familiarisation à celui passé dans la phase de test. Comme mesures de contrôle, il est possible de déterminer le niveau global d'exploration ainsi que les préférences de côté et d'objet. Ces auteurs ont également montré qu'il n'y avait pas de différences significatives dans l'indice global d'accoutumance en fonction du délai, et que l'indice de discrimination n'est pas affecté par la durée du délai entre les procès.

Au fil du temps, d'autres mesures du NOR ont été élaborées. Un pourcentage de temps passé à explorer le nouvel objet par rapport au temps total passé à explorer les deux objets peut être une mesure de la reconnaissance d'un nouvel objet (Benice et al. 2006 Broadbent et al. 2010 Oliveira et al. 2010 Sarkisyan et Hedlund 2009). Ce concept peut être représenté par Indice de reconnaissance (RI), c'est-à-dire le temps consacré à l'investigation du nouvel objet par rapport à l'investigation totale de l'objet [RI = T N/(T N + T F)], et c'est le principal indice de rétention (Botton et al. 2010 Gaskin et al. 2010 Mumby et al. 2002 Piterkin et al. 2008 Schindler et al. 2010).

Dans la recherche de Wang et al. (2007), ils ont appliqué une mesure de la fonction cognitive à travers le Indice de préférence. Il s'agit d'un rapport entre le temps passé à explorer l'un des deux objets en phase d'apprentissage (UNE ou alors B) ou le roman en phase de test (C) sur le temps total passé à explorer les deux objets, c'est-à-dire, UNE ou alors B/(B + UNE) ×򠄀 (%) dans la session de formation et B ou alors C/(B + C) ×򠄀 (%) en phase de test. Par conséquent, un indice de préférence supérieur à 50 % indique une préférence pour un nouvel objet, inférieur à 50 % pour un objet familier et 50 % pour aucune préférence (Hammond et al. 2004). Une distance parcourue peut aussi être une mesure d'exploration. Au cours de la phase d'accoutumance, les animaux ont progressivement diminué la distance totale parcourue au cours des jours d'exposition à l'environnement expérimental, ce qui signifie une familiarisation accrue (Oliveira et al. 2010).

La quantité totale d'exposition à un objet familier ainsi que le temps que les animaux ont passé à explorer cet objet seraient liés à l'ampleur des IR, comme déjà mentionné. Cependant, dans l'étude de Gaskin et al. (2010), ils ont observé qu'il n'y avait pas de corrélation significative entre le temps passé par les animaux à explorer l'objet familier pendant la phase de familiarisation et l'ampleur des RI obtenues pendant la phase de test. De cette façon, dans le test NOR, une corrélation entre le temps d'exploration de l'objet familier pendant la phase de familiarisation et la quantité de préférence pour le nouvel objet dans la phase de test n'est pas une condition nécessaire pour la préférence pour la nouveauté.


Causes de l'effet Coriolis

La principale cause de l'effet Coriolis est la rotation de la Terre. Lorsque la Terre tourne dans le sens inverse des aiguilles d'une montre sur son axe, tout ce qui vole ou s'écoule sur une longue distance au-dessus de sa surface est dévié. Cela se produit parce que quelque chose se déplace librement au-dessus de la surface de la Terre, la Terre se déplace vers l'est sous l'objet à une vitesse plus rapide.

À mesure que la latitude augmente et que la vitesse de rotation de la Terre diminue, l'effet Coriolis augmente. Un pilote volant le long de l'équateur lui-même serait capable de continuer à voler le long de l'équateur sans aucune déviation apparente. Un peu au nord ou au sud de l'équateur cependant, et le pilote serait dévié. Au fur et à mesure que l'avion du pilote s'approche des pôles, il subira le plus de déviation possible.

Un autre exemple de variations latitudinales de déviation est la formation d'ouragans. Ces tempêtes ne se forment pas à moins de cinq degrés de l'équateur car il n'y a pas assez de rotation de Coriolis. Déplacez-vous plus au nord et les tempêtes tropicales peuvent commencer à tourner et à se renforcer pour former des ouragans.

En plus de la vitesse de rotation et de la latitude de la Terre, plus l'objet lui-même se déplace rapidement, plus il y aura de déviation.

La direction de déviation de l'effet Coriolis dépend de la position de l'objet sur Terre. Dans l'hémisphère nord, les objets dévient vers la droite, tandis que dans l'hémisphère sud, ils dévient vers la gauche.


Possibilités d'accès

Acheter un seul article

Accès instantané à l'intégralité de l'article PDF.

Le calcul des taxes sera finalisé lors du paiement.


5 réponses 5

Avec tout le crédit à @Wolff pour ces images. Comme nous l'avons vu, le gris est à 100 % par rapport à l'éclairage, aux couleurs environnantes, à la perception et à la méthode que vous mesurez. Prenez ces images par exemple. L'image principale n'a en fait aucun "quotred" dedans. Si vous prenez un compte-gouttes et mesurez toute zone qui semble rouge, elles sont toutes en fait des nuances de gris.

si vous prenez une coupe d'aile de perroquet et que vous la sortez de son contexte, elle ressemble à des bruns et des gris.

Si vous remettez exactement la même coupe sur le perroquet, il redevient rouge dans le contexte du bleu/vert.

Mais cela étant dit, LCH ou LAB serait votre meilleur pari pour mesurer le gris neutre.

Recommandation de @Luciano pour cet article : Théorie des couleurs : existe-t-il une mesure de la "colorfulness" ? A de bonnes informations pour ce que vous essayez de faire.

RVB ou en fait la saturation dans ses équivalents de coordonnées polaires est hautement non linéaire lorsque l'on essaie de l'utiliser comme mesure de "à quel point cette couleur RVB semble-t-elle proche du gris lorsqu'elle est regardée à l'écran" Cela ne prend pas du tout en compte la vision humaine des couleurs , c'est purement pour contrôler l'électronique de l'écran. Vous avez cogné votre tête à ce fait.

You should instead of it convert your RGB values to LCH system and extract C (=chroma) or to CIELAB system (=Lab in Photoshop) and calculate sqrt(a^2+b^2). Those systems are developed to be more linear in predicting what's seen. For grey C=0 and a=b=0. This is of course a lie if the screen isn't color calibrated.

ADD due comments: The questioner very likely believes his program doesn't get fooled by anything else what it has seen, it can concentrate to a single RGB combination at a time. I guess the questioner expects something that could help his program make the same decision than a perfect colorimeter would do when it reads the same RGB outputted by a faultless sRGB screen with no disturbing extra lights.

I do agree with the perception of colour already mentioned. There are warm grays and cool grays, but the grayest of all would be a neutral gray.

Looking at RGB values, if all 3 numbers are the same, that is neutral gray, such as R109 G109 B109, or R228 G228 B228. If one number is slightly different, it will tone the gray either cool or warm.

Looking at HSB values, to me it seems that it doesn't matter what the HUE is, as long as the saturation is 0 it will be 100% gray. If you up the SATURATION by any percentage, then you will get a tone of whatever the HUE is.

So, as a graphic designer, I would argue that any SATURATION value lower than 4% would be considered gray, but it could be a cool gray, or a warm gray depending on the HUE value (even if it's 0).

The programmer still has to make the final call as to what is considered gray, unless you only want it to detect 100% gray, then it's easy.

HSL is the best color space to represent grayness.

Grayness can be seen as a distance S (saturation), which is 0.0 if pure gray, and 1.0 if it is the farthest from gray.

Measure and perception

In the two samples provided I measured (with Photoshop eyedropper): 0 10% 49% and 216 12% 51% which differs a bit from what you claimed, maybe due to a color profile being dropped in the publication process.

With a calibrated Eizo CG303w (120cd/m2 5000k 2.2), I have the feeling that the one on the left tend to the red and the one one right on the blue. I lowered the saturation until I had the feeling both were gray, I reached 4% and 5% saturation in the HSL space.

My 5000k for the white point is a bit warm, and I see the brown patch more colored than the blue one. Likely a white point at 5500k-6500k would be better and we should also make sure that ambient light (idealy a calibrated light such as Just) and wall color (white, dirty white ?) are in the range of acceptable grayness.

In RGB, a color is gray when R=G=B, but the operator needs to evaluate several numbers in order to answer to "is it grey". It is harder to give ourselve a distance from R=G=B just by looking at the numbers.

HSL color space is more direct since S (saturation, in the range [0,1]) gives immediately the answer: 0 is grey or a value below a threshold is chosen to be gray.

And yet, L and S are given by:

Hence you can build an indicator filter than will display say in pure green when pixels are pure gray or enough gray or that will display in false colors all the gray enough pixels, and destaturate the rest. Implementation will depend on your software and langage you can create a Matlab filter for Photoshop for instance that will do that, or even an autonomous plugin.

As you notice from the answers you get very different results depending on your definitions, some of which contradict each other. None of the answers are wrong per see. They just depend on different definitions of color and gray.

Now, since we do not know anything about your underlying problem it is hard to say. From a color science perspective there really is no satisfactory answer to the question how much grayness is there in a image.

Certainly color science says that all such processing should be made in a absolute color space preferably some derivate of CIE Lab possibly polar like Lch. Although this leaves something to be desired since theres no guarantee that a polar Lhc is even remotely uniform in the way needed. In general color science avoids doing this kind of pondering by avoiding interpolation of color.

Anyway it would probably be more accurate to calculate ΔE between a neutral color with same lightness value. This would probably have best scientific merit as far as how human senses work as its trying to solve a similar enough problem so the number would have a more understandable meaning.

But you can also be doing some kind of color measurement from an image then the Lch would be good again as would HSL it depends a bit what you assume the camera sensor to be like. So if you want to emulate a colorimeter then this certainly has some value.

But really if you want a better scope of when something is gray or you need to investigate what humans consider gray you might just try to fit the data to human description, the XKCD colorvsurvey has some good datapoints to investigate further. The good thing about this database is that its not color corrected. Which means that if your application is web then you get to glean the error of average uncalibrated monitor from statistical agregate. But bad for color science.

And so on . You can dig as deep as you like.

the question is wague enough that we can not really answer the question without defining things for you.


6 Lists and data frames

6.1 Lists

An R liste is an object consisting of an ordered collection of objects known as its Composants.

There is no particular need for the components to be of the same mode or type, and, for example, a list could consist of a numeric vector, a logical value, a matrix, a complex vector, a character array, a function, and so on. Here is a simple example of how to make a list:

Components are always numbered and may always be referred to as such. Thus if Lst is the name of a list with four components, these may be individually referred to as Lst[[1]] , Lst[[2]] , Lst[[3]] and Lst[[4]] . If, further, Lst[[4]] is a vector subscripted array then Lst[[4]][1] is its first entry.

If Lst is a list, then the function length(Lst) gives the number of (top level) components it has.

Components of lists may also be nommé, and in this case the component may be referred to either by giving the component name as a character string in place of the number in double square brackets, or, more conveniently, by giving an expression of the form

This is a very useful convention as it makes it easier to get the right component if you forget the number.

So in the simple example given above:

Lst$name is the same as Lst[[1]] and is the string "Fred" ,

Lst$wife is the same as Lst[[2]] and is the string "Mary" ,

Lst$child.ages[1] is the same as Lst[[4]][1] and is the number 4 .

Additionally, one can also use the names of the list components in double square brackets, i.e., Lst[["name"]] is the same as Lst$name . This is especially useful, when the name of the component to be extracted is stored in another variable as in

It is very important to distinguish Lst[[1]] from Lst[1] . &lsquo [[ &hellip ]] &rsquo is the operator used to select a single element, whereas &lsquo [ &hellip ] &rsquo is a general subscripting operator. Thus the former is the first object in the list Lst , and if it is a named list the name is ne pas included. The latter is a sublist of the list Lst consisting of the first entry only. If it is a named list, the names are transferred to the sublist.

The names of components may be abbreviated down to the minimum number of letters needed to identify them uniquely. Thus Lst$coefficients may be minimally specified as Lst$coe and Lst$covariance as Lst$cov .

The vector of names is in fact simply an attribute of the list like any other and may be handled as such. Other structures besides lists may, of course, similarly be given a noms attribute also.

6.2 Constructing and modifying lists

New lists may be formed from existing objects by the function list() . An assignment of the form

sets up a list Lst of m components using object_1 , &hellip, object_m for the components and giving them names as specified by the argument names, (which can be freely chosen). If these names are omitted, the components are numbered only. The components used to form the list are copied when forming the new list and the originals are not affected.

Lists, like any subscripted object, can be extended by specifying additional components. Par exemple

6.2.1 Concatenating lists

When the concatenation function c() is given list arguments, the result is an object of mode list also, whose components are those of the argument lists joined together in sequence.

Recall that with vector objects as arguments the concatenation function similarly joined together all arguments into a single vector structure. In this case all other attributes, such as dim attributes, are discarded.

6.3 Data frames

UNE data frame is a list with class "data.frame" . There are restrictions on lists that may be made into data frames, namely

  • The components must be vectors (numeric, character, or logical), factors, numeric matrices, lists, or other data frames.
  • Matrices, lists, and data frames provide as many variables to the new data frame as they have columns, elements, or variables, respectively.
  • Numeric vectors, logicals and factors are included as is, and by default 18 character vectors are coerced to be factors, whose levels are the unique values appearing in the vector.
  • Vector structures appearing as variables of the data frame must all have the same length, and matrix structures must all have the same row size.

A data frame may for many purposes be regarded as a matrix with columns possibly of differing modes and attributes. It may be displayed in matrix form, and its rows and columns extracted using matrix indexing conventions.

6.3.1 Making data frames

Objects satisfying the restrictions placed on the columns (components) of a data frame may be used to form one using the function data.frame :

A list whose components conform to the restrictions of a data frame may be contraint into a data frame using the function as.data.frame()

The simplest way to construct a data frame from scratch is to use the read.table() function to read an entire data frame from an external file. This is discussed further in Reading data from files.

6.3.2 attach() and detach()

The $ notation, such as accountants$home , for list components is not always very convenient. A useful facility would be somehow to make the components of a list or data frame temporarily visible as variables under their component name, without the need to quote the list name explicitly each time.

The attach() function takes a &lsquodatabase&rsquo such as a list or data frame as its argument. Thus suppose lentils is a data frame with three variables lentils$u , lentils$v , lentils$w . The attach

places the data frame in the search path at position 2 , and provided there are no variables u , v or w in position 1 , u , v and w are available as variables from the data frame in their own right. At this point an assignment such as

does not replace the component u of the data frame, but rather masks it with another variable u in the working directory at position 1 on the search path. To make a permanent change to the data frame itself, the simplest way is to resort once again to the $ notation:

However the new value of component u is not visible until the data frame is detached and attached again.

To detach a data frame, use the function

More precisely, this statement detaches from the search path the entity currently at position 2 . Thus in the present context the variables u , v and w would be no longer visible, except under the list notation as lentils$u and so on. Entities at positions greater than 2 on the search path can be detached by giving their number to detach , but it is much safer to always use a name, for example by detach(lentils) or detach("lentils")

Noter: In R lists and data frames can only be attached at position 2 or above, and what is attached is a copie of the original object. You can alter the attached values passant par assign , but the original list or data frame is unchanged.

6.3.3 Working with data frames

A useful convention that allows you to work with many different problems comfortably together in the same working directory is

  • gather together all variables for any well defined and separate problem in a data frame under a suitably informative name
  • when working with a problem attach the appropriate data frame at position 2 , and use the working directory at level 1 for operational quantities and temporary variables
  • before leaving a problem, add any variables you wish to keep for future reference to the data frame using the $ form of assignment, and then detach()
  • finally remove all unwanted variables from the working directory and keep it as clean of left-over temporary variables as possible.

In this way it is quite simple to work with many problems in the same directory, all of which have variables named x , y and z , for example.

6.3.4 Attaching arbitrary lists

attach() is a generic function that allows not only directories and data frames to be attached to the search path, but other classes of object as well. In particular any object of mode "list" may be attached in the same way:

Anything that has been attached can be detached by detach , by position number or, preferably, by name.

6.3.5 Managing the search path

The function search shows the current search path and so is a very useful way to keep track of which data frames and lists (and packages) have been attached and detached. Initially it gives

where .GlobalEnv is the workspace. 19

After lentils is attached we have

and as we see ls (or objects ) can be used to examine the contents of any position on the search path.

Finally, we detach the data frame and confirm it has been removed from the search path.


4 réponses 4

The way to generate objects by color in Inkscape would be to trace the bitmap to vector paths.

This is how I selected the color yellow of the sunflowers to add a white border to all sunflowers.

File > Import bitmap (embed) to the Inkscape canvas:

Wikimédia

Select the bitmap and choose Path > Trace Bitmap. :

  • Dans Mode tab choose Couleurs, et Lisse. Ne pas Empiler scans.
  • Reduce number of Scans until the desired object is clear (here I used 6)

Delete all objects of unwanted colors until only a single color is left over (imported bitmap is removed here only to better demonstrate the effect):

Select the single yellow object to adjust Stroke ou alors Fill settings to desired values (here I applied a 6 Pixel white stroke):

For a higher precision of the trace (down to pixel size) we may have to scale up our source bitmap, depending on its content. The example below show a detail from above image linearly scaled by 1000% to reveal pixel blocks (la gauche). Then I traced this image (droite) with 12 color scans and without any path optimization (i.e. disable all, Smooth, Suppress speckles, Smooth corners, et Optimize Path):

We now can select all yellow objects, create a union object from these, and adjust fill and stroke (here a 10 px white stroke):

Noter: Tracing large upscaled bitmaps will result in an immense amount of data. Your computer will need enough RAM to handle this.