[PYTHON] Ich bin auf einen Bildfilter mit einem eindeutig japanischen Namen namens Kuwahara-Filter gestoßen, und als ich ihn ausprobierte, war er erstaunlich, also werde ich ihn vorstellen.

Einführung

** Was ist ein Kuwahara-Filter ** Der Kuwahara-Filter ist eine Art Glättungsfilter, der von einem Universitätsprofessor namens Michiyoshi Kuwahara (laut Wikipedia) entwickelt wurde. Trotz der Einfachheit des Inhalts sieht er wie ein Ölgemälde aus, wenn er gut gemacht wird (Ergebnisse zuerst). Wenn Sie sehen möchten, werfen Sie einen Blick auf den unteren Rand des Artikels. Kuwahara filter -Wikipedia Datenverarbeitung für SPECT (Originalpapier?)

Inhalt des Kuwahara-Filters

image.png https://upload.wikimedia.org/wikipedia/commons/4/49/Kuwahara.jpg

Um den Kuwahara-Filter kurz zu erklären: Dieser Filter verwendet die Farbe jedes Pixels als Durchschnittsfarbe des Bereichs mit der geringsten Streuungssumme in den oberen linken, oberen rechten, unteren linken und unteren rechten quadratischen Bereichen beliebiger Breite.

Um im obigen Bild die Farbe des zentralen Pixels zu bestimmen,

  1. Berechnen Sie die Verteilung der ** a ** Fläche, ** b ** Flächenverteilung, ** c ** Flächenverteilung und ** d ** Flächenverteilung für jede RGB-Farbe und für jede Fläche Fügen Sie alle RGB hinzu.
  2. Vergleichen Sie die in 1 erhaltenen Varianzen und berechnen Sie den Durchschnitt der Farben im kleinsten Bereich für jedes RGB.
  3. Stellen Sie die durchschnittliche Farbe in 2 als Farbe des mittleren Pixels ein.

Führen Sie die obigen Schritte oder den Prozess aus, um gleichwertige Ergebnisse zu erhalten. Im Bild beträgt eine Seite des quadratischen Bereichs 3 Pixel, kann jedoch eine beliebige Breite haben.

Implementierung

** Definition **

import numpy as np
import cv2

 def kuwahara (Bild, r = 5, Größe ändern = Falsch, Rate = 0,5): # Originalbild, Breite der quadratischen Fläche-1, Größe ändern oder Verhältnis beim Ändern der Größe
    h,w,_=pic.shape
    if resize:pic=cv2.resize(pic,(int(w*rate),int(h*rate)));h,w,_=pic.shape
    filtered_pic=np.empty_like(pic)
    pic=np.pad(pic,((r,r),(r,r),(0,0)),"edge")
    ave,var=cv2.integral2(pic)
 ave = (ave [: -r-1,: -r-1] + ave [r + 1 :, r + 1:] - ave [r + 1:,: -r-1] -ave [: -r -1, r + 1:]) / (r + 1) ** 2 # Stapelableitung der durchschnittlichen Farbe der Fläche
 var = ((var [: -r-1,: -r-1] + var [r + 1 :, r + 1:] - var [r + 1:,: -r-1] -var [: - r-1, r + 1:]) / (r + 1) ** 2-ave ** 2) .summe (Achse = 2) # Chargenableitung der Regionsverteilung

    for i in range(h):
        for j in range(w):
 gefiltert_pic [i, j] = np.array ([ave [i, j], ave [i + r, j], ave [i, j + r], ave [i + r, j + r]]) [ np.array ([var [i, j], var [i + r, j], var [i, j + r], var [i + r, j + r]]). argmin ()] #color Entscheidung

    return filtered_pic

** Lauf **

import matplotlib.pyplot as plt

 pic = np.array (plt.imread ("input_picture.png ")) Ändern Sie # input_picture.png in den Pfad des Bildes, das Sie filtern möchten
filtered_pic=kuwahara(pic,7,True,0.2)
plt.imshow(filtered_pic)

Ergebnis

Hier sind einige der Fotos, die ich gemacht habe, als ich letztes Jahr nach Frankreich gereist bin.

** Das Originalbild ** IMG_20191102_111359.jpg

** Nach dem Auftragen des Filters ** コメント 2020-06-10 193044.jpg ** Ver. ** mit einer Seite der quadratischen Fläche kleiner eee.png

Menschen, Menschen, Menschen, Menschen > ** Ernsthafte Malerei ** <  ̄Y^Y^Y^Y^Y^Y^ ̄

Zusammenfassung

Ich habe es eingeführt, weil ich von der Textur wie dem Zeichnen auf der Leinwand beeindruckt war. Es ist einfach, probieren Sie es aus. Ich konnte mir keine Methode vorstellen, die diesmal die for-Anweisung nicht verwendet. Wenn also die Größenänderung für ein großes Bild deaktiviert ist, dauert es einige Zeit. Vergessen Sie nicht, das dritte Argument auf True zu setzen.

Recommended Posts

Ich bin auf einen Bildfilter mit einem eindeutig japanischen Namen namens Kuwahara-Filter gestoßen, und als ich ihn ausprobierte, war er erstaunlich, also werde ich ihn vorstellen.
Als ich in IPython versuchte, den Wert zu sehen, war es ein Generator, also kam ich auf ihn, als ich frustriert war.
Bildverarbeitung mit Python (ich habe versucht, es in 0 und 1 Mosaikkunst zu binarisieren)
Als ich versuchte, PIL und matplotlib in einer virtuellen Umgebung zu installieren, war ich süchtig danach.
Als ich den AtCoder Beginner Contest ausprobierte, war es ein schreckliches Ergebnis, also schaue ich zurück
Da es Doppelgenger gab, habe ich versucht, es mit künstlicher Intelligenz zu unterscheiden (lacht) (Teil 1)
Wenn Sie mit python3 mit urllib auf eine URL zugreifen, die Japanisch (japanische URL) enthält, wird diese willkürlich mit HTML codiert, und es tritt ein Fehler auf. Notieren Sie sich daher die Problemumgehung
Ein Memorandum beim automatischen Erwerb mit Selen
Ich stieß auf einen Lambda-Ausdruck, als ich mir Sorgen um die Funktionalisierung machte
Ich habe eine App für Ausländer erstellt, die Japan in Hackason besuchen, und einen Preis gewonnen, aber als ich mir das genau überlegte, war es nutzlos.
Als ich eine Baumkarte (Flächendiagramm) mit Python erstellt habe, war sie subtil. Wenn ich also Schnörkel verwendete, fühlte es sich ziemlich gut an.
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
Irgendwie hat der Code, den ich geschrieben habe, funktioniert und ich war beeindruckt, also werde ich ihn veröffentlichen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Ich konnte AWS-Batch mit Python, Moto verspotten, also werde ich es verlassen
Ich habe ein Bildklassifizierungsmodell erstellt und versucht, es auf dem Handy zu verschieben
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten