(Hinzugefügt am 24. Mai 2017) Ich habe den Code auf github registriert. Es ist dasselbe wie das auf dieser Seite beschriebene. https://github.com/summer4an/mosaic_detector
https://twitter.com/stsiizk/status/858517661889646592 Das? Vielleicht ist das ... Also beschloss ich, mich (?) Auf den kommenden Tag vorzubereiten.
Es gibt mehrere Arten von Mosaiken, aber dieses Mal konzentrieren wir uns auf eine große Anzahl von Kisten, die in einer einzigen Farbe bemalt sind.
Ich habe Google ausprobiert, aber es ging nur um Mosaikverarbeitung, und ich konnte keinen Weg finden, den Mosaikteil zu erkennen, also habe ich es selbst gemacht.
Ziel ist es, den Mosaikteil des Bildes zu erkennen und weiß zu malen.
Ich habe Python3.5.2 und OpenCV3.2.0 verwendet.
Nach dem Erstellen eines Codes mit Bildverarbeitungssoftware und Python und dem Ausprobieren ergab das folgende Verfahren zufriedenstellende Ergebnisse.
Der Grund für die leichte Unschärfe mit 4 ist, dass als Ergebnis von 3 die Randlinie der Box keine gerade Linie mit einer Breite von 1 Pixel wurde, sondern etwas, das zwischen den Breiten von 2 Pixeln hin und her ging, so dass es schwierig war, das Muster anzupassen Das ist weil Der Grund für die Verwendung von Rasterbildern verschiedener Größen in 5 ist, dass der Mustervergleich anfällig für Skalierungen ist. Ich habe ein Rasterbild von 11 bis 20 Pixel im Quadrat verwendet, was häufig vorkommt.
Erstellen Sie zunächst ein Rasterbild für den Mustervergleich für jede der folgenden Größen.
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Generieren Sie eine Musterbilddatei für den Fall, dass die Mosaikgröße zwischen 11 und 20 liegt.
#Die folgenden Referenzmaterialien.
# http://qiita.com/suto3/items/5181b4a3b9ebc206f579
from PIL import Image
def make_image(masksize, filename):
picturesize = 2+masksize+masksize-1+2
screen = (picturesize, picturesize)
img = Image.new('RGB', screen, (0xff,0xff,0xff))
pix = img.load()
for i in range(2,picturesize,masksize-1):
for j in range(2,picturesize,masksize-1):
for k in range(0,picturesize):
pix[i, k] = (0,0,0)
pix[k, j] = (0,0,0)
img.save(filename)
return
for i in range(11, 20+1):
make_image(i, "pattern"+str(i)+"x"+str(i)+".png ")
Wenn Sie es ausführen, können Sie 10 Bilder wie dieses erhalten.
Die folgende Erkennung wird unter Verwendung dieses Gitterbildes durchgeführt.
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Erkennen Sie den Teil des Mosaiks und malen Sie ihn weiß.
#Die folgenden Referenzmaterialien.
#・ Vorlagenübereinstimmung
# http://docs.opencv.org/3.2.0/d4/dc6/tutorial_py_template_matching.html
# http://opencv.jp/cookbook/opencv_img.html#id32
import cv2
import numpy as np
import sys
args = sys.argv
if len(args) != 2:
print("too few argument.")
sys.exit(1)
img_rgb = cv2.imread(args[1])
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) #Zu Graustufen
img_gray = cv2.Canny(img_gray,10,20) #Kantenerkennung
img_gray = 255-img_gray #Schwarz-Weiß-Inversion
img_gray = cv2.GaussianBlur(img_gray,(3,3),0) #Verwischen Sie ein wenig
cv2.imwrite('output_gray.png', img_gray)
for i in range(11,20+1):
pattern_filename = "pattern"+str(i)+"x"+str(i)+".png "
template = cv2.imread(pattern_filename, 0)
w, h = template.shape[::-1]
img_kensyutu_kekka = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.3
loc = np.where(img_kensyutu_kekka >= threshold)
for pt in zip(*loc[::-1]):
#cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (255,255,255), 1)
cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (255,255,255), -1)
cv2.imwrite('output_progress_'+str(i)+'.png', img_rgb)
cv2.imwrite('output_result.png', img_rgb)
cv2.imshow('window1', img_rgb)
cv2.imshow('window2', img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
Verarbeiten Sie Bilder mit Mosaiken in verschiedenen Größen. Das Bild stammt von http://gahag.net/011032-cat-sunflower-smell/.
Das Ergebnis ist unten.
Ich konnte alle Bereiche ausfüllen, in denen das Mosaik angebracht wurde. Die zusätzlichen Teile werden ebenfalls ausgefüllt, aber es wird trotzdem ergänzt, so dass es in Ordnung ist.
Ich bin auch mit den Ergebnissen der anderen Bilder zufrieden.
So verwenden Sie die Bildbibliothek http://qiita.com/suto3/items/5181b4a3b9ebc206f579
Template Matching http://docs.opencv.org/3.2.0/d4/dc6/tutorial_py_template_matching.html http://opencv.jp/cookbook/opencv_img.html#id32
Recommended Posts