Neue Perspektiven: Homographiematrix und Texturmetriken | von Cyril Benedict Lugod | Juni 2023

0
25


8 von 9

In diesem Blogbeitrag gehen wir darauf ein Homographiematrizen Dies ist besonders nützlich, wenn Sie eine andere Perspektive auf Ihr Bild wünschen. Wir werden auch anpacken Texturmetrikendas die räumliche Anordnung von Intensitätswerten berücksichtigt.

Homographie ist einfach die Beziehung zwischen zwei Bildern einer flachen Oberfläche im Raum. Es bezieht sich auf eine Transformationsmatrix in einem homogenen Koordinatenraum. Eine Homographiematrix erstellt eine Zuordnung zwischen zwei planaren Projektionen eines Bildes. Im Grunde ermöglicht es Ihnen, eine Projektion des Bildes aus einer anderen Perspektive zu erstellen.

Für diese Demonstration verwenden wir dieses Foto meines Laptops, das ich aufgenommen habe, während ich auf dem Tisch saß. Angenommen, ich möchte ein haben Draufsicht Foto meines Laptops, aber ich habe derzeit keinen Zugriff auf diesen Laptop computer für eine zweite Aufnahme. Wir können Homografiematrizen anwenden, um in diesem Bild eine neue Perspektive auf den Laptop computer zu erhalten.

Laptop computer auf einem Tisch

Wir müssen definieren mehr als drei koplanare Punkte auf diesem Bild, die wir in der Draufsichtperspektive leicht definieren können.

lappy = imread('lappy.jpg')
imshow(lappy)

src = np.array([150, 1030,
2420, 280,
3860, 940,
1270, 2830
]).reshape((4, 2))

plt.scatter(src[:, 0], src[:, 1], colour='purple', s=20)

plt.present()

An jeder Ecke des Laptops sind vier rote Punkte definiert

Nachdem wir nun sorgfältig vier koplanare Punkte aus diesem Bild ausgewählt und markiert haben, wollen wir die Zielebene festlegen. Diese Zielebene ist die Draufsichtprojektion dieses Laptops. Eine schnelle Google-Suche zeigt, dass die Abmessungen dieses Laptops 314 mm x 219 mm betragen. Daher werden wir unsere Zielabmessungen auf 3140 x 2190 definieren.

Habe nichts dagegen Die Tatsache, dass ich eine zusätzliche 0 hinzugefügt habe (skaliert um den Faktor 10), habe ich nur getan, um sicherzustellen, dass die Ausgabe immer noch eine hohe Auflösung hat, da unser Quellbild eine hohe Auflösung hat.

dst = np.array([0, 0,
3140, 0,
3140, 2190,
0, 2190,
]).reshape((4, 2))

plt.scatter(dst[:, 0], dst[:, 1], colour='purple', s=3)
plt.present()

Positionen der neuen Ecken des Laptops im Bild

Wir werden das nutzen rework Klasse von scikit-image um die erforderliche Homographiematrix zu generieren und sie basierend auf den von uns definierten Punkten auf unser Originalbild anzuwenden. Im Wesentlichen übernimmt es die Berechnung der Matrix für uns.

from skimage import rework

tform_lappy = rework.estimate_transform('projective', src, dst)
tf_lappy_img = rework.warp(lappy, tform_lappy.inverse, output_shape=(2190, 3140, 4))
fig, ax = plt.subplots()
ax.imshow(tf_lappy_img)
_ = ax.set_title('Projective transformation')

Laptop computer aus dem Originalbild, projiziert in eine neue Draufsichtperspektive

Wir haben jetzt eine Draufsicht auf unseren Laptop computer, alles von unserem angewinkelten Originalbild aus. Ziemlich großartig, um ehrlich zu sein!

Texturmetriken bieten eine Möglichkeit, die räumliche Anordnung und Muster von Intensitätswerten innerhalb eines Bildes zu erfassen. Sie dienen als alternativer Ansatz zur Charakterisierung von Bildern, insbesondere wenn Farbinformationen aufgrund von Faktoren wie Weißabgleich oder Farbabweichungen nicht konsistent oder zuverlässig sind. Im Gegensatz zur ausschließlichen Konzentration auf absolute Größen ähneln Texturmetriken räumlichen Filtern. Sie analysieren die Verteilung von Intensitätswerten in einem Bild mit Schwerpunkt auf deren Anordnung.

Die Berechnung von Texturmetriken umfasst typischerweise die folgenden Schritte:

  1. Definieren eines sich bewegenden Fensters, auch Nachbarschaft oder Kernel genannt, und Durchlaufen dieses Fensters über das Bild.
  2. In jedem Fenster wird ein Vorkommenshistogramm erstellt, das die Häufigkeit jeder Graustufe darstellt (Intensitätswert) gegenwärtig.
  3. Berechnen eines Wahrscheinlichkeitsarrays basierend auf dem Vorkommenshistogramm, das die Wahrscheinlichkeit des Auftretens jeder Graustufe innerhalb des Fensters bestimmt.
  4. Abschließend wird eine spezifische Texturmetrik basierend auf dem Wahrscheinlichkeitsarray abgeleitet. Die Wahl der zu verwendenden Metrik hängt von der jeweiligen Anwendung oder durchgeführten Analyse ab.

Bei Verwendung dieser Methode wird der Mitte jedes sich bewegenden Fensters eine Texturmetrik zugewiesen. Um ein umfassendes Verständnis der Texturverteilung im gesamten Bild zu erhalten, iteriert das bewegliche Fenster über alle Positionen und berechnet bei jedem Schritt die Texturmetrik.

Texturmetriken liefern wertvolle Einblicke in die in einem Bild vorhandenen räumlichen Muster. Sie finden in einer Reihe von Anwendungen Verwendung, darunter Bildanalyse, Laptop Imaginative and prescient und Texturklassifizierung. Diese Metriken ermöglichen die Quantifizierung und den Vergleich von Texturen und erleichtern Aufgaben wie Bildsegmentierung, Objekterkennung und Anomalieerkennung.

Genug der Erklärung, lasst uns mit der Demonstration fortfahren. Betrachten Sie das folgende Satellitenbild der Stadt Tacloban, nachdem sie durch den Taifun Haiyan verwüstet wurde (Bagyong Yolanda) im Jahr 2013.

Die Stadt Tacloban wurde 2013 vom Taifun Haiyan verwüstet (Foto von Prof. Benjur Borja)

Wir können Texturmetriken verwenden, um die Gebäude und beschädigten Bereiche aus diesem vom Taifun heimgesuchten Satellitenbild zu segmentieren.

Wir werden die Entropie für jede Iteration des Werts berechnen, den wir für den Schwellenwert festgelegt haben.

Die Entropie kann mit der Formel berechnet werden:

u_P_b stellt die Wahrscheinlichkeit eines Ergebnisses dar (z.B „beschädigt) in der binären Variablen oder Verteilung.

u_P_w stellt die Wahrscheinlichkeit dar andere Ergebnis (z.B „nicht beschädigt) in der binären Variablen oder Verteilung.

sat_c = skimage.colour.rgb2gray(sat)
e_sat_lst = []

fig, ax = plt.subplots(5, 4, figsize=(15, 15))
ax = ax.flatten()

for okay, i in enumerate(np.linspace(0, 1, 20)):
sat_bw = sat_c > i
ax[k].imshow(sat_bw, cmap='grey')
ax[k].axis('off')
ax[k].set_title(f'Threshold: {i:.2f}', fontsize=15)
u_P_b = sum(sat_bw.flatten()) / len(sat_bw.flatten())
u_P_w = 1 - u_P_b
if u_P_b == 0 or u_P_b == 1:
e_sat = 0
else:
e_sat = - (u_P_b * np.log(u_P_b) + u_P_w * np.log(u_P_w))
e_sat_lst.append(e_sat)

plt.tight_layout()
plt.present()

Ergebnisse bei unterschiedlichen Schwellenwerten

Ähnlich wie beim Schwellenwertbestimmungskriterium für die Bildsegmentierung wird ein geeigneter Schwellenwert immer noch durch Heuristiken bestimmt.

Um uns bei der Suche nach einem angemessenen Schwellenwert zu helfen, können wir überprüfen, welcher Schwellenwert vorliegt maximiert die Entropie.

e_sat_lst = np.array(e_sat_lst)
plt.plot(e_sat_lst, 'purple')
plt.title('Entropy Values')
plt.ylabel('Threshold Worth');
Die Entropie wird bei einem Schwellenwert von maximiert 4,0

Nachdem wir nun den zu verwendenden Schwellenwert geschätzt haben, können wir diesen verwenden, um die Bereiche im Bild zu maskieren, um Bereiche mit niedriger und hoher Entropie zu trennen.

threshold = np.linspace(0, 1, 20)[e_sat_lst.argmax()]
print(f'The edge is: {threshold:.2f}')

sat = imread('sat.png')[:, :, :-1]

sat_bw = skimage.colour.rgb2gray(sat) > threshold

satP_b = sum(sat_bw.flatten())/len(sat_bw.flatten())
satP_w = (len(sat_bw.flatten())-sum(sat_bw.flatten()))/len(sat_bw.flatten())
satE_dm = - (satP_b * np.log(satP_b) + satP_w * np.log(satP_w))

print(f'Entropy Worth of {satE_dm:.2f}')

fig, ax = plt.subplots(1, 2, figsize=(10,10))
ax[0].set_title('Unique Picture')
ax[0].imshow(sat)
ax[1].set_title('Broken Buildings')
ax[1].imshow(sat)
ax[1].imshow(sat_bw, cmap='Reds', alpha=0.3)

plt.present()

The edge is: 0.21
Entropy Worth of 0.68

Eine auf Entropie basierende Schwellenwertermittlung deckt potenzielle Gebiete mit beschädigter Infrastruktur in Tacloban Metropolis auf

In diesen Bildern werden beschädigte Gebäude rot hervorgehoben, während unbeschädigte Gebäude nicht hervorgehoben werden. Durch die Verwendung der Entropie als Texturmetrik konnten wir die beschädigten Gebäude erfolgreich von den unbeschädigten trennen. Der höhere Entropiewert in beschädigten Bereichen weist auf ein höheres Maß an Zufälligkeit oder Unvorhersehbarkeit in der Textur hin, was wahrscheinlich auf die Zerstörung oder Veränderung des Objekts im Bild zurückzuführen ist.

Unsere Untersuchung von Homographiematrizen und Texturmetriken hat deren Bedeutung für die Bildtransformation und -analyse hervorgehoben. Homographiematrizen ermöglichen es uns, neue Perspektiven auf ein Bild zu gewinnen, während Texturmetriken Einblicke in räumliche Muster und Anordnungen von Intensitätswerten liefern. Durch die praktische Anwendung dieser Konzepte haben wir ihre Nützlichkeit bei Aufgaben wie der Blickwinkelmanipulation und Bildsegmentierung demonstriert. Insgesamt verbessern diese Techniken unser Verständnis von Bildern und ermöglichen eine verbesserte Analyse in der Laptop Imaginative and prescient und Bildverarbeitung.

Persönlich, Homographiematrizen ist vielleicht das Meiste Wow Thema für mich in der Bildbearbeitung. Mir ist bekannt, dass Matrizen für Transformationen verwendet werden, aber nur im Konzept von Vektoren und Ebenen. Nachdem wir das Thema jedoch in Bildern zur perspektivischen Manipulation behandelt und angewendet hatten, überraschte es mich trotz meines Vorwissens über Transformationen einigermaßen.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here