Vor kurzem begann Bildverarbeitung zu lernen Ich dachte, dass ich eine Wavelet-Konvertierung für das Bild durchführen möchte. Ich habe den folgenden tollen Artikel gefunden.
Mokemokechicken: Beispiel für die Wavelet-Konvertierung von Bildern mit Python
Wie der Artikelautor mokemokechicken jedoch auch feststellt. ** Es gab ein Problem, dass "es nur funktioniert, wenn die vertikale und horizontale Größe der Bilder gleich sind" **.
Diesmal also unter Bezugnahme auf den Beispielcode von mokemokechicken, Durch Laden eines Bildes mit OpenCV ist ** "unabhängig von der vertikalen und horizontalen Größe des Eingabebildes" ** eine Wavelet-Konvertierung in das Bild möglich. (Obwohl es cool geschrieben ist, ist es eine Pointe, die ich gut machen konnte, wenn ich das Bild mit OpenCV lesen und den Code manipulieren wollte)
・ PyWavelets ・ Numpy ・ OpenCV
URL : http://www.pybytes.com/pywavelets/ref/2d-dwt-and-idwt.html
Mit der Funktion * pywt.dwt2 * für ein zweidimensionales Array (diesmal ein Bild) Die zweidimensionale Wavelet-Umwandlung kann leicht durchgeführt werden.
Eine Funktion, die erweitert wurde, um eine mehrdimensionale zweidimensionale Wavelet-Konvertierung zu ermöglichen Es ist als * pywt.wavedec2 * vorbereitet, und diesmal habe ich mich mit dieser Funktion befasst.
Dieses Mal konvertieren wir Wavelet in Lena
import pywt
import numpy as np
import cv2
def image_normalization(src_img):
"""
Normalisierungsprozess zur Vermeidung von Überbelichtung
cv2.Erforderlich bei der Anzeige von Wavelet-konvertierten Bildern mit imshow (nur für Bilder mit großen Werten)
"""
norm_img = (src_img - np.min(src_img)) / (np.max(src_img) - np.min(src_img))
return norm_img
def merge_images(cA, cH_V_D):
"""numpy.4 Array(Oben links,(Oben rechts, unten links, unten rechts))Verbinden"""
cH, cV, cD = cH_V_D
cH = image_normalization(cH) #Auch wenn Sie es entfernen, ist es in Ordnung
cV = image_normalization(cV) #Auch wenn Sie es entfernen, ist es in Ordnung
cD = image_normalization(cD) #Auch wenn Sie es entfernen, ist es in Ordnung
cA = cA[0:cH.shape[0], 0:cV.shape[1]] #Wenn das Originalbild keine Zweierpotenz hat, kann es zu Brüchen kommen. Passen Sie daher die Größe an. Passen Sie die kleinere an.
return np.vstack((np.hstack((cA,cH)), np.hstack((cV, cD)))) #Fügen Sie Pixel oben links, oben rechts, unten links und unten rechts hinzu
def coeffs_visualization(cof):
norm_cof0 = cof[0]
norm_cof0 = image_normalization(norm_cof0) #Auch wenn Sie es entfernen, ist es in Ordnung
merge = norm_cof0
for i in range(1, len(cof)):
merge = merge_images(merge, cof[i]) #Ordnen Sie die vier Bilder zu
cv2.imshow('', merge)
cv2.waitKey(0)
cv2.destroyAllWindows()
def wavelet_transform_for_image(src_image, level, M_WAVELET="db1", mode="sym"):
data = src_image.astype(np.float64)
coeffs = pywt.wavedec2(data, M_WAVELET, level=level, mode=mode)
return coeffs
if __name__ == "__main__":
filename = 'lena.jpg'
LEVEL = 3
# 'haar', 'db', 'sym' etc...
# URL: http://pywavelets.readthedocs.io/en/latest/ref/wavelets.html
MOTHER_WAVELET = "db1"
im = cv2.imread(filename)
print('LEVEL :', LEVEL)
print('MOTHER_WAVELET', MOTHER_WAVELET)
print('original image size: ', im.shape)
"""
Konvertieren Sie für jeden BGR-Kanal
cv2.imread ist B.,G,Beachten Sie, dass die Bilder in der Reihenfolge R ausgespuckt werden
"""
B = 0
G = 1
R = 2
coeffs_B = wavelet_transform_for_image(im[:, :, B], LEVEL, M_WAVELET=MOTHER_WAVELET)
coeffs_G = wavelet_transform_for_image(im[:, :, G], LEVEL, M_WAVELET=MOTHER_WAVELET)
coeffs_R = wavelet_transform_for_image(im[:, :, R], LEVEL, M_WAVELET=MOTHER_WAVELET)
coeffs_visualization(coeffs_B)
# coeffs_visualization(coeffs_G)
# coeffs_visualization(coeffs_R)
Originalbild (lena.jpg)
Bild des Wavelet-Koeffizienten (B-Kanal)
Wenn Sie Korrekturen haben, lassen Sie es uns bitte wissen.
Recommended Posts