[PYTHON] Rauschunterdrückung und Hintergrundtransparenz von binärisierten Bildern

Einführung

Zuvor schrieb ich einen Artikel Grundlagen der binärisierten Bildverarbeitung durch Python. Dies ist die Entwicklung dieses Artikels.

Informationen zur Ausführungsverarbeitung

Diesmal, wie der Name des Artikels sagt, __ · Geräuschreduzierung __ __ ・ Hintergrundtransparenz __ und dazu, __ ・ Invertierte Bildverarbeitung __ Auch laufen

Quellcode


import cv2
import numpy as np

#Bilder laden
img = cv2.imread('sample2-1.png')

#Graustufenumwandlung
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

#Schwellenwert einstellen
threshold_value = 110

#Array erstellen (für Ausgabe)
threshold_img = gray.copy()

#Implementierung(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255

#Output:sample2-2
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)

#Importieren von in Graustufen konvertierten Bildern
img = cv2.imread("sample2-2.png ")
#Rauschunterdrückungsverarbeitung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)
#Invertiertes Schwarzweißbild
img2 = cv2.bitwise_not(img_mask)

#output:sample2-3,2-4
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)

#Hintergrundtransparenz

from PIL import Image

#Bilder laden
org = Image.open( 'sample2-3.png' )

#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Keine weiße Behandlung
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Schreiben anders als weiß
        trans.putpixel( (x, y), pixel )
        
# output:sample2-5
trans.save('sample2-5.png')

Anleitung

Von der Importanweisung zur Ausgabe: sample2-2

Dies entspricht fast dem oben beschriebenen Code von Grundlagen der binärisierten Bildverarbeitung durch Python. Auf dem Bild wird nur der Schwellenwert geändert.

Geräuschreduzierung

#Geräuschreduzierung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)

In diesem Teil können Sie die Größe der Umgebung festlegen, in der die Bildverarbeitung ausgeführt wird.

Schwarz-Weiß-Inversionsverarbeitung

#Invertiertes Schwarzweißbild
img2 = cv2.bitwise_not(img_mask)

Die Inversionsverarbeitung ist in opencv integriert, und die Inversionsverarbeitung ist nur mit dieser Anweisung möglich. Übrigens diesmal. Obwohl es schwarzweiß ist, kann es auch mit einem Farbbild ausgeführt werden.

Transparente Bilderzeugung

#Bilder laden
org = Image.open( 'sample2-3.png' )

#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Keine weiße Behandlung
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Schreiben anders als weiß
        trans.putpixel( (x, y), pixel )

Da der Prozess wie oben in # beschrieben ist, wird die Beschreibung weggelassen.

Setzen Sie diese Ergebnisse sample2-1 ~ 2-5.

Originalbild (sample2-1.png)

sample2-1.png Dieses Bild wird oft in der Bildverarbeitung verwendet, daher denke ich, dass viele Leute damit vertraut sind. Es ist Teil eines Aktbildes einer Frau namens Lena. [Erklärung zu Lena aus Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%8A_(%E7%94%BB%E5%83%8F%E3%83] % 87% E3% 83% BC% E3% 82% BF)

Binarisierte Bildverarbeitung (sample2-2.png)

sample2-2.png

Rauschentfernungsverarbeitung (sample2-3.png)

sample2-3.png

Schwarz-Weiß-Inversionsverarbeitung (sample2-4.png)

sample2-4.png

Andere Transparenzverarbeitung als Weiß (sample2-5.png)

sample2-5.png In diesem Artikel ist es schwer zu verstehen, daher können Sie es selbst versuchen, indem Sie den Code kopieren.

Vereinfachung des Quellcodes

Der vorherige Code machte es einfacher, jeden Prozess zu sehen. Durch Ändern der Reihenfolge kann jedoch die Anzahl der Schritte verringert werden.


import cv2
import numpy as np
from PIL import Image

#Bilder laden
img = cv2.imread('sample2-1.png')
#Graustufenumwandlung
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Schwellenwert einstellen
threshold_value = 110
#Array erstellen (für Ausgabe)
threshold_img = gray.copy()
#Implementierung(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255

#Rauschunterdrückungsverarbeitung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)

#Invertiertes Schwarzweißbild
img2 = cv2.bitwise_not(img_mask)

#Hintergrundtransparenz
#Bilder laden
org = Image.open('sample2-3.png')

#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))

#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
    for y in range(height):
        pixel = org.getpixel( (x, y) )
        
        #Keine weiße Behandlung
        if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
            continue
        
        #Schreiben anders als weiß
        trans.putpixel( (x, y), pixel )
        
#Output:sample2-2~2-5
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)
trans.save('sample2-5.png')

Wenn es sich um einen Stapelprozess handelt, kann ein Fehler auftreten, der jedoch mit einem Jupyter-Notebook möglich war. Da das Bild im Prozess direkt ohne Lesen gelesen werden kann, ist es nahe am Fehler, aber schneller.

Recommended Posts

Rauschunterdrückung und Hintergrundtransparenz von binärisierten Bildern
Generiere automatisch Bilder von Koala und Bär
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Zeigen Sie eingebettete Bilder von MP3 und Flac mit Mutagen an
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Suchen und speichern Sie das Bild von Tomono Kafu von Twitter
Sammlung und Automatisierung erotischer Bilder durch Deep Learning