15.10.2009Spaß mit Bildern
Bin letztens auf ein interessantes Paper gestoßen:
Das Thema ist, Copy & Paste in Bildern zu erkennen. Also im Prinzip den Einsatz von Photoshops Clone-tool.
Die Grundgedanke ist ganz einfach:
Zuerst werden aus dem Bild alle möglichen 16×16 Pixel großen Unterbilder extrahiert. Jedes Unterbild wird dann diskret Cosinus Transformiert (man schaut quasi welche Cosinus Anteile wie stark in den Unterbildern vorhanden sind) Zum Schluss vergleicht man die Ergebnisse der Transformationen untereinander. Cluster von ähnlichen Transformationen deuten stark auf Copy & Paste hin.
Hier hat sich jemand daran versucht das ganze nachzubauen. Ich hab’s auch probiert… überaschender Weise in Python ![]()
Allerdings habe ich mich aus Gründen der Performanz gegen eine selbst geschriebene DCT und für numPy’s FFT entschieden. Es funktioniert, aber das Ergebnis überzeugt mich noch nicht so recht… Dafür habe ich mich in diesem Rahmen mal mit der Image-Library auseinander gesetzt und jetzt kann ich Bilder invertieren
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from PIL import Image,ImageOps from sys import argv # open the image filename = argv[1] im = Image.open(filename) w,h = im.size # read the pixel data in a list data = list(im.getdata()) # invert each pixel counter = 0 for y in range(0,h): for x in range(0,w): RGBs = data[counter] counter += 1 im.putpixel((x,y), (255-RGBs[0], 255-RGBs[1], 255-RGBs[2])) # come up with a good name tmp = filename.split('.') tmp.pop() # kick file-extension outputName = '' for part in tmp: # In case there is a '.' in the name... outputName += part outputName += '_inverted.png' # save the inverted image im.save(outputName) |
Hier ein Beispiel:


Einfach den Code unter Invert.py speichern und im Terminal folgendes tippen:
1 | python Invert.py original.jpg |

Leave a Reply