** 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?)
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,
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.
** 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)
Hier sind einige der Fotos, die ich gemacht habe, als ich letztes Jahr nach Frankreich gereist bin.
** Das Originalbild **
** Nach dem Auftragen des Filters ** ** Ver. ** mit einer Seite der quadratischen Fläche kleiner
Menschen, Menschen, Menschen, Menschen > ** Ernsthafte Malerei ** <  ̄Y^Y^Y^Y^Y^Y^ ̄
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