[PYTHON] J'ai essayé de trier les objets de l'image du plat de steak-② Tri des numéros de chevauchement

introduction

La dernière fois, la recherche sélective a été utilisée pour détecter des objets dans l'image du plat de steaks. Bien que la précision se soit améliorée, j'ai remarqué que sur environ 50 images, elles sont classées en environ 3 types: images en forme de poussière, la même image (position de recadrage légèrement différente) et les images d'objets nécessaires. .. Cette fois, j'essaierai de voir si je ne peux en sélectionner que les images d'objets nécessaires.

hypothèse

Une image avec un grand nombre de chevauchements n'est-elle pas nécessaire lors de l'extraction d'un objet d'une image? Cependant, en réalité, il est possible d'exclure la partie enfant rectangulaire de la relation parent-enfant.

Que dit ce gars

Lors de la détection d'un objet à partir d'une image, il est extrait sous forme de rectangle, mais la partie où les rectangles sont mélangés est appelée chevauchement. La partie rouge de l'image ci-dessous.

overlap.png

Source de référence

Code source

Je l'ai écrit pour le moment.

group_image


# -*- coding: utf-8 -*-

import cv2
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import selectivesearch
import os

def main():
    # loading lena image
    img = cv2.imread("{Image de repas de jeu de steak}")

    # perform selective search
    img_lbl, regions = selectivesearch.selective_search(
        img,
        scale=500,
        sigma=0.9,
        min_size=10
    )

    candidates = set()

    for r in regions:
        # excluding same rectangle (with different segments)
        if r['rect'] in candidates:
            continue

        # excluding regions smaller than 2000 pixels
        if r['size'] < 2000:
            continue

        # distorted rects
        x, y, w, h = r['rect']

        if w / h > 1.2 or h / w > 1.2:
            continue

        candidates.add(r['rect'])

    # draw rectangles on the original image
    fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
    ax.imshow(img)

    overlaps = {}

    #Comptez le nombre de chevauchements et attribuez-les au tableau.
    for x, y, w, h in candidates:
        group = '%s_%s_%s_%s' % (x, y, w, h)

        for x2, y2, w2, h2 in candidates:
            if x2 - w < x < x2 + w2 and y2 - h < y < y2 + h2:

                if not group in overlaps:
                    overlaps[group] = 0

                overlaps[group] = overlaps[group] + 1

    print overlaps

    #Sort les fichiers avec 30 chevauchements ou plus (30 est défini arbitrairement comme un seuil).
    for key, overlap in enumerate(overlaps):
        if overlap > 30:
            for x, y, w, h in candidates:
                group = x + y + w + h

                if group in overlaps:
                    cv2.imwrite("{Chemin du répertoire}" + str(group) + '.jpg', img[y:y + h, x:x + w])

Supplément

--Objet Détermine s'il chevauche l'image détectée.

if x2 - w < x < x2 + w2 and y2 - h < y < y2 + h2:

résultat

(Original) 50 feuilles → 36 feuilles

Environ 30% des images du plat de steaks ont été supprimées.

De plus, 5 types d'images d'objets de précédent sont restés.

Résumé

――Cette fois, comme il n'y a qu'un seul type d'image de vérification, nous avons effectué quelques ajustements et jugements de résultats, donc si vous essayez avec d'autres images, vous pouvez obtenir des résultats différents. ――La prochaine fois, j'aimerais faire quelque chose comme le clustering.

Tous les liens de page

Recommended Posts

J'ai essayé de trier les objets de l'image du plat de steak-② Tri des numéros de chevauchement
J'ai essayé de trier les objets de l'image du plat de steak-④ Clustering
J'ai essayé de trier les objets de l'image du plat de steak --③ Image similaire Détection de carte de chaleur
J'ai essayé de trier les objets de l'image du plat de steak-⑤ Détection de point de fonction d'image similaire
J'ai essayé de couper une image fixe de la vidéo
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de prédire le nombre de personnes infectées par le virus corona en tenant compte de l'effet de s'abstenir de sortir
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.
J'ai essayé de créer l'image de démarrage SD de LicheePi Nano
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
(Python) J'ai essayé d'analyser 1 million de mains ~ J'ai essayé d'estimer le nombre d'AA ~
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé d'automatiser le travail de masquage du visage de l'image de coordination pour l'usure
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent
J'ai essayé d'utiliser PI Fu pour générer un modèle 3D d'une personne à partir d'une image
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai essayé d'adapter la fonction exponentielle et la fonction logistique au nombre de patients positifs au COVID-19 à Tokyo
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
Trouvez tous les modèles pour extraire un nombre spécifique de l'ensemble
J'ai essayé de visualiser la condition commune des téléspectateurs de la chaîne VTuber
[Python] J'ai essayé de reproduire le programme d'évacuation d'urgence pour revenir du monde pour revenir du monde modifié de "La disparition de Haruhi Suzumiya"
[Version terminée] Essayez de connaître le nombre d'habitants de la ville à partir de la liste d'adresses avec Python
J'ai essayé de déplacer le ballon
J'ai essayé de livrer du courrier depuis Node.js et Python en utilisant le service de livraison de courrier (SendGrid) d'IBM Cloud!
J'ai essayé d'estimer la section.
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.