[PYTHON] Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ② Sortieren der Überlappungsnummern

Einführung

Letztes Mal wurde die selektive Suche verwendet, um Objekte im Bild des Steak-Set-Essens zu erkennen. Obwohl sich die Genauigkeit verbessert hat, habe ich festgestellt, dass von ungefähr 50 Bildern ungefähr 3 Typen klassifiziert werden: staubartige Bilder, dasselbe Bild (leicht unterschiedliche Beschneidungsposition) und erforderliche Objektbilder. .. Dieses Mal werde ich versuchen zu sehen, ob ich nur die erforderlichen Objektbilder aus ihnen auswählen kann.

Hypothese

Ist beim Extrahieren eines Objekts aus einem Bild nicht ein Bild mit einer großen Anzahl von Überlappungen erforderlich? In der Realität ist es jedoch möglich, den rechteckigen untergeordneten Teil der Eltern-Kind-Beziehung auszuschließen.

Was sagt dieser Typ?

Wenn Sie ein Objekt aus einem Bild erkennen, wird es als Rechteck extrahiert. Der Teil, in dem die Rechtecke gemischt werden, wird als Überlappung bezeichnet. Der rote Teil des Bildes unten.

overlap.png

Referenzquelle

Quellcode

Ich habe es vorerst geschrieben.

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("{Steak Set Mahlzeit Bild}")

    # 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 = {}

    #Zählen Sie die Anzahl der Überlappungen und weisen Sie sie dem Array zu.
    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

    #Gibt Dateien mit 30 oder mehr Überlappungen aus (30 wird willkürlich als Schwellenwert festgelegt).
    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("{Verzeichnispfad}" + str(group) + '.jpg', img[y:y + h, x:x + w])

Ergänzung

--Object Legt fest, ob es sich mit dem erkannten Bild überschneidet.

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

Ergebnis

(Original) 50 Blatt → 36 Blatt

Etwa 30% der Bilder der Steak-Mahlzeit wurden entfernt.

Darüber hinaus blieben 5 Arten von Objektbildern von vorherigen übrig.

Zusammenfassung

――Dieses Mal, da es nur einen Typ von Verifizierungsbild gibt, haben wir einige Anpassungen und Ergebnisbeurteilungen vorgenommen. Wenn Sie es also mit anderen Bildern versuchen, erhalten Sie möglicherweise andere Ergebnisse. ――Nächstes Mal möchte ich so etwas wie Clustering machen.

Alle Seitenlinks

Recommended Posts

Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ② Sortieren der Überlappungsnummern
Ich habe versucht, Objekte aus dem Bild des Steak-Sets zu sortieren
Ich habe versucht, Objekte aus dem Bild des Steak-Set-Essens zu sortieren - Ähnliches Bild Wärmekartenerkennung
Ich habe versucht, die Objekte aus dem Bild des Steak-Sets zu sortieren. ⑤ Ähnliche Erkennung von Bildmerkmalen
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
[Python] Ich habe versucht, das Mitgliederbild der Idolgruppe mithilfe von Keras zu beurteilen
Ich habe versucht, die Gesichtsverdeckungsarbeit des Koordinationsbildes für das Tragen zu automatisieren
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Ich habe versucht, das Musikgenre anhand des Songtitels im Recurrent Neural Network vorherzusagen
Ich habe versucht, mit PI Fu aus einem Bild ein 3D-Modell einer Person zu erstellen
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, das lokale Minimum der Goldstein-Preis-Funktion zu bekämpfen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Finden Sie alle Muster, um eine bestimmte Zahl aus dem Satz zu extrahieren
Ich habe versucht, den allgemeinen Zustand der VTuber-Kanalbetrachter zu visualisieren
[Python] Ich habe versucht, das Fluchtprogramm zu reproduzieren, um aus der Welt zurückzukehren und aus der modifizierten Welt von "Das Verschwinden von Haruhi Suzumiya" zurückzukehren.
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Ich habe versucht, den Abschnitt zu schätzen.
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.