(Digitale Bildverarbeitung MATLAB+Python) Kapitel 3 Grundlegende Bildoperationen - Abschnitt 2: Algebraische Bildoperationen

Eins: arithmetische Bildoperation

(1) Additionsoperation

A: Überblick

Additionsoperation : bezieht sich auf die Additionsoperation auf Pixelebene von zwei Bildern derselben Größe, um ein neues Bild zu erhalten. Die entsprechenden Pixelwerte der beiden Bilder seien f 1 ( x , y ) f_{1}(x,y)F1( x ,y )f 2 ( x , y ) f_{2}(x,y)F2( x ,y ) , dann kann ihre Additionsoperation ausgedrückt werden als

g ( x , y ) = f 1 ( x , y ) + f 2 ( x , y ) g(x,y)=f_{1}(x,y) + f_{2}(x,y)g ( x ,j )=F1( x ,j )+F2( x ,j )

Beim Durchführen von Bildadditionsoperationen gibt es hauptsächlich die folgenden Möglichkeiten, Summenwerte zu verarbeiten

  • Abschneideverarbeitung : Wenn das Ergebnis der Addition der entsprechenden Pixelwerte der beiden Bilder die maximale Graustufe des Bildes überschreitet, wird das Ergebnis z. B. bei einem 8-Bit-Graustufenbild zwangsweise auf die maximale Graustufe abgeschnitten Maximalwert ist 255
  • Gewichtete Summierung : Die Pixelwerte an verschiedenen Positionen werden nicht einfach addiert, sondern müssen auch gemäß den Gewichtungen verschiedener Positionen gewichtet werden, um spezifische Anwendungsanforderungen besser zu erfüllen
  • Skalierungsverarbeitung : Skalieren Sie das Ergebnis der Addition der entsprechenden Pixelwerte der beiden Bilder auf den angegebenen Graustufenbereich, z. B. bei einem 8-Bit-Graustufenbild, teilen Sie das Ergebnis durch einen Faktor, sodass es 255 nicht überschreitet
  • Überlaufverarbeitung : Wenn das Ergebnis der Addition der entsprechenden Pixelwerte der beiden Bilder den Maximalwert der Grauskala des Bildes überschreitet, wird das Ergebnis automatisch auf die nächste Stufe überlaufen, beispielsweise in ein 8-Bit-Graustufenbild , wenn der Überlauf Level 9 erreicht, ist der Pixelwert 0, wenn er auf Level 10 überläuft, ist der Pixelwert 1 und so weiter
  • Sättigungsverarbeitung : Wenn das Ergebnis der Addition der entsprechenden Pixelwerte der beiden Bilder den Maximalwert der Grauskala des Bildes überschreitet, stellen Sie das Ergebnis auf den Maximalwert ein. Diese Verarbeitung wird auch als Überlaufverarbeitung bezeichnet, während die Unterlaufverarbeitung das Ergebnis auf 0 setzt

Bildbeschreibung hier einfügen

Die Hauptanwendungen der Bildaddition sind wie folgt

  • Bildverbesserung : Durch Hinzufügen eines Bildes zu einem helleren oder dunkleren Bild können der Kontrast und die Helligkeit des Bildes verbessert werden, um es klarer und heller zu machen
  • Bildfusion : Durch Gewichtung und Verarbeitung von zwei Bildern aus unterschiedlichen Winkeln oder unterschiedlichen Bändern kann ein fusioniertes Bild erhalten werden, das zur Verbesserung der Qualität und des Informationsgehalts des Bildes verwendet wird
  • Zielerkennung : Gewichtung und Verarbeitung von Bildern mit unterschiedlichen Maßstäben oder unterschiedlichen Richtungen können ein neues Bild zur Erkennung der Position und Form des Ziels erhalten
  • Rauschentfernung : Durch Hinzufügen eines Bildes zu einem glatten oder verschwommenen Bild kann Rauschen im Bild unterdrückt und das Signal-Rausch-Verhältnis des Bildes verbessert werden
  • Farbbilderzeugung : Durch Gewichtung und Verarbeitung der Graustufenbilder verschiedener Bänder kann ein neues Farbbild für die Erzeugung und Verarbeitung von Farbbildern erhalten werden

B: Programm

MATLAB-Implementierung : Die relevanten Funktionen sind wie folgt, für eine detaillierte Erklärung lesen Sie bitte das MATLAB-Hilfehandbuch

imadd(X,Y)Funktion: ist eine Funktion, die zur Bildaddition in MATLAB verwendet wird

  • Aund Bzwei Bilder, die hinzugefügt werden müssen, können Graustufenbilder, RGB-Bilder oder Binärbilder sein
  • Darüber hinaus imadd()kann die Funktion auch steuern, wie die Bildhinzufügungsoperation gehandhabt wird, indem einige optionale Parameter hinzugefügt werden. Im Folgenden sind einige der häufig verwendeten optionalen Parameter aufgeführt
    • scaling: Es wird verwendet, um die Skalierungsmethode der Bildadditionsoperation zu steuern, die optionalen Werte sind uint8, uint16, single, double. Der Standardwert istuint8
    • outputtype: Wird verwendet, um den Datentyp des Ausgabebilds anzugeben, optionale Werte enthalten denselben Typ wie der Eingabebildtyp, und der Standardwert ist derselbe wie der Eingabebildtyp
    • fillvalues: Wird verwendet, um anzugeben, wie die Pixelwerte außerhalb des Bereichs gefüllt werden, wenn das Additionsergebnis den Graustufenbereich des Bilds überschreitet
      • bound: Handle abschneiden (Standard)
      • nearest: Nächste-Nachbar-Differenz
      • samesize: Außerhalb des Bereichs liegende Pixelwerte auf den Maximalwert des Eingabebilds setzen
    • uint16: Wird verwendet, um den Datentyp des Ausgabebildes als vorzeichenlose 16-Bit-Ganzzahl anzugeben, die zur Verarbeitung von Bildern mit hohem Dynamikbereich verwendet werden kann

Erzielen Sie die folgenden Effekte

Bildbeschreibung hier einfügen

Back = imread('desert.jpg');
Foreground = imread('car.jpg');

result1 = imadd(Foreground,-100);
result2 = imadd(Back, Foreground);
result3 = imadd(Back, result1);

subplot(221),imshow(Foreground),title('原目标图');
subplot(222),imshow(result1),title('原目标图加标量');
subplot(223),imshow(result2),title('原目标图加背景');
subplot(224),imshow(result3),title('加标量图叠加背景');

Python-Implementierung : Verwenden Sie Python, um dieselbe Funktion wie oben zu erreichen

cv2.add(src1, src2[, dst[, mask[, dtype]]])Funktion: Diese Funktion addiert den Wert jedes Pixels und speichert das Ergebnis im Ausgabebild. Wenn das Ergebnis der Addition größer als der Maximalwert ist, der durch den Datentyp des Ausgabebildes dargestellt werden kann, wird der Wert dieses Pixels abgeschnitten und als Maximalwert gespeichert. Wenn der Datentyp des Ausgabebilds ein unsigned Integer-Typ ist, wird jeder Pixelwert kleiner als 0 auf 0 gekürzt. Wenn der Datentyp des Ausgabebildes ein vorzeichenbehafteter Integer-Typ ist, wird jeder Pixelwert, der größer als der Maximalwert ist, auf den Maximalwert gekürzt

  • src1: das erste Eingabebild.
  • src2: das zweite Eingangsbild.
  • dst: Das Ausgabebild, das dieselbe Größe und denselben Typ wie das Eingabebild hat oder None.
  • mask: Ein optionales Maskenbild, das die gleichen Abmessungen wie das Eingabebild haben muss oder None.
  • dtype: Der Datentyp des Ausgabebildes, wenn nicht angegeben, ist es der Standardwert src1.dtype.
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

Back = cv2.imread('desert.jpg')
Foreground = cv2.imread('car.jpg')

result1 = cv2.add(Foreground, -100)
result2 = cv2.add(Back, Foreground)
result3 = cv2.add(Back, result1)

plt.subplot(221), plt.imshow(cv2.cvtColor(Foreground, cv2.COLOR_BGR2RGB)), plt.title('原目标图')
plt.subplot(222), plt.imshow(cv2.cvtColor(result1, cv2.COLOR_BGR2RGB)), plt.title('原目标图加标量')
plt.subplot(223), plt.imshow(cv2.cvtColor(result2, cv2.COLOR_BGR2RGB)), plt.title('原目标图加背景')
plt.subplot(224), plt.imshow(cv2.cvtColor(result3, cv2.COLOR_BGR2RGB)), plt.title('加标量图叠加背景')
plt.show()

Bildbeschreibung hier einfügen

(2) Subtraktionsoperation

A: Überblick

Subtraktionsoperation : bezieht sich auf die Additionsoperation auf Pixelebene von zwei Bildern derselben Größe, um ein neues Bild zu erhalten. Die entsprechenden Pixelwerte der beiden Bilder seien f 1 ( x , y ) f_{1}(x,y)F1( x ,y )f 2 ( x , y ) f_{2}(x,y)F2( x ,y ) , dann kann ihre Subtraktionsoperation ausgedrückt werden als

g ( x , y ) = f 1 ( x , y ) − f 2 ( x , y ) g(x,y)=f_{1}(x,y) - f_{2}(x,y)g ( x ,j )=F1( x ,j )F2( x ,j )

Beim Durchführen von Bildadditionsoperationen gibt es hauptsächlich die folgenden Möglichkeiten, Summenwerte zu verarbeiten

  • Abschneideverarbeitung : Nach der Subtraktion der Grauwerte der entsprechenden Pixel der beiden Bilder wird, wenn die Differenz einen bestimmten Schwellenwert überschreitet, auf den Schwellenwert abgeschnitten, andernfalls wird der ursprüngliche Wert als Differenzergebnis beibehalten
  • Nehmen Sie den Absolutwert : Subtrahieren Sie die Grauwerte der entsprechenden Pixel der beiden Bilder und nehmen Sie dann den Absolutwert als Ergebnis der Differenz zwischen den beiden Bildern. Dieses Verfahren ist einfach und leicht zu implementieren, wird jedoch leicht durch die Helligkeit und den Kontrast des Bildes beeinflusst, und die Wirkung auf Bilder mit großen Graustufenänderungen ist nicht gut.
  • Quadratische Differenz : Subtrahieren Sie die Grauwerte der entsprechenden Pixel der beiden Bilder und bilden Sie das Quadrat, summieren Sie dann alle Differenzen und ziehen Sie die Quadratwurzel als Ergebnis der Differenz zwischen den beiden Bildern. Diese Methode kann den Einfluss von Graustufenänderungen auf die Ergebnisse effektiv eliminieren, vergrößert jedoch den Bereich mit großen Graustufenänderungen, wodurch die Genauigkeit der Differenz beeinträchtigt wird
  • Gewichtete Quadratdifferenz : Um die Nachteile der beiden Verfahren auszugleichen, kann die Methode der gewichteten Quadratdifferenz verwendet werden, das heißt, die Differenz jedes Pixels wird mit einem Gewichtungskoeffizienten multipliziert und dann summiert und quadratisch gewurzelt. Üblicherweise verwendete Gewichtungskoeffizienten umfassen die Gaußsche Funktion, die gleichmäßige Verteilungsfunktion usw., die den Einfluss von Graustufenänderungen auf die Ergebnisse effektiv eliminieren und die Nachteile des Quadratdifferenzverfahrens zum Vergrößern von Bereichen mit großen Graustufenänderungen vermeiden können

Bildbeschreibung hier einfügen

Die Hauptanwendungen der Bildsubtraktion sind wie folgt

  • Zielerkennung : Subtrahieren Sie das Hintergrundbild von dem Bild, das das Ziel enthält, um ein Differenzbild nur mit dem Zielbereich zu erhalten, das für die Zielerkennung und -erkennung durch das Differenzbild verwendet werden kann
  • Bildverbesserung : Trennen Sie die niederfrequente Komponente des Bildes von der hochfrequenten Komponente und subtrahieren Sie das erhaltene hochfrequente Bild, indem Sie die niederfrequente Komponente vom Originalbild entfernen, wodurch die Kanten und Details des Bildes verbessert werden können
  • Hintergrundbeseitigung : Bei der Videoverarbeitung wird das Differenzbild durch Subtrahieren des aktuellen Rahmenbilds vom vorherigen Rahmenbild erhalten, das zur Hintergrundbeseitigung und Verfolgung von sich bewegenden Objekten verwendet werden kann
  • Texturanalyse : Bei der Texturanalyse kann durch Subtrahieren eines Bildes von seinem transformierten Bild, wie Drehung oder Skalierung, ein Bild erhalten werden, das nur Texturinformationen enthält, für die Texturklassifizierung und -analyse
  • Morphologische Verarbeitung : Bei der morphologischen Verarbeitung wird nach der Binarisierung des Bildes das Originalbild von dem Ergebnisbild morphologischer Operationen wie Korrosion und Ausdehnung subtrahiert, um ein morphologisch verarbeitetes Bild zu erhalten

B: Programm

MATLAB-Implementierung : Die relevanten Funktionen sind wie folgt, für eine detaillierte Erklärung lesen Sie bitte das MATLAB-Hilfehandbuch

imsubtractFunktion: ist eine Funktion in MATLAB, die verwendet wird, um die Differenz der Pixelwerte zwischen zwei Bildern zu berechnen. Es kann verwendet werden, um Pixelwerte in einem Bild und die Differenz zwischen entsprechenden Pixeln in zwei Bildern zu subtrahieren

  • Die Eingabeparameter I1und I2stellen die beiden Bilder dar, deren Differenz berechnet werden muss, sie können Graustufen- oder Farbbilder sein. Der Ausgabeparameter Jist das Ergebnisbild der Berechnung, das dieselbe Größe und denselben Typ wie das Eingabebild hat
  • Optionaler Parameter 'uint8'und 'intensity'Datentyp zur Angabe des Ausgabeergebnisses, das uint8ein oder- doubleTyp sein kann. Wenn dieser Parameter weggelassen wird, imsubtractverwendet die Funktion standardmäßig denselben Datentyp wie das Eingabebild
J = imsubtract(I1, I2);
J = imsubtract(I1, I2, 'uint8');
J = imsubtract(I1, I2, 'intensity');

imabsdiffFunktion: Es ist eine Funktion, die in MATLAB verwendet wird, um die absolute Differenz der Pixelwerte zwischen zwei Bildern zu berechnen. Es kann verwendet werden, um die absolute Differenz zwischen entsprechenden Pixeln in zwei Bildern zu berechnen. Die Funktion hat keine optionalen Parameter


Erzielen Sie die folgenden Effekte
Bildbeschreibung hier einfügen

Back=imread('hallback.bmp');
Foreground=imread('hallforeground.bmp');
result = imabsdiff(Foreground,Back);
subplot(131),imshow(Back),title('背景');
subplot(132),imshow(Foreground),title('前景图');
subplot(133),imshow(result),title('图像相减');

Python-Implementierung : Verwenden Sie Python, um dieselbe Funktion wie oben zu erreichen

cv2.absdiff(src1, src2[, dst])Funktion: Es ist eine Funktion, die verwendet wird, um die Differenz zwischen zwei Bildern in OpenCV zu berechnen

  • src1: Das erste Eingabebild, das ein Einzelkanal- oder Mehrkanalbild sein kann, und der Datentyp ist numpyein Array
  • src2: Das zweite Eingabebild mit src1derselben Größe und demselben Datentyp kann ein Einkanal- oder Mehrkanalbild sein, und der Datentyp ist numpyein Array
  • dst: Optionaler Parameter, das Ausgabebild hat dieselbe Größe und denselben Datentyp wie das Eingabebild, und der Datentyp ist numpyein Array. src1Wenn nicht angegeben, wird als src2Ausgabe ein Array mit der gleichen Größe und dem gleichen Datentyp wie und erstellt
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

# 读取背景和前景图像
Back = cv2.imread('hallback.bmp')
Foreground = cv2.imread('hallforeground.bmp')

# 计算前景图像和背景图像的像素绝对差值
result = cv2.absdiff(Foreground, Back)

# 使用matplotlib展示结果图像
plt.subplot(1, 3, 1)
plt.imshow(cv2.cvtColor(Back, cv2.COLOR_BGR2RGB))
plt.title('背景')

plt.subplot(1, 3, 2)
plt.imshow(cv2.cvtColor(Foreground, cv2.COLOR_BGR2RGB))
plt.title('前景图')

plt.subplot(1, 3, 3)
plt.imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
plt.title('图像相减')

plt.show()

Bildbeschreibung hier einfügen

(3) Multiplikationsoperation

A: Überblick

Additionsoperation : Dies ist eine binäre Operation, die Pixel für Pixel ausgeführt wird. Es multipliziert die Pixelwerte entsprechender Pixel in zwei Eingabebildern, um ein neues Ausgabebild zu erhalten. Die entsprechenden Pixelwerte der beiden Bilder seien f 1 ( x , y ) f_{1}(x,y)F1( x ,y )f 2 ( x , y ) f_{2}(x,y)F2( x ,y ) , dann kann ihre Multiplikation ausgedrückt werden als

g ( x , y ) = f 1 ( x , y ) × f 2 ( x , y ) g(x,y)=f_{1}(x,y) × f_{2}(x,y)g ( x ,j )=F1( x ,j )×F2( x ,j )

Die Hauptanwendungen der Bildmultiplikation sind wie folgt

  • Bildverbesserung : Bildmultiplikationsoperationen können verwendet werden, um den Kontrast und die Helligkeit eines Bildes zu verbessern. Beispielsweise kann das Multiplizieren eines Bildes mit einem konstanten Bild mit hoher Helligkeit dunkle Bereiche des Bildes heller machen
  • Bildkomposition : Bildmultiplikationsoperationen können verwendet werden, um zwei Bilder zu einem Bild zu kombinieren. Beispielsweise können durch Multiplizieren eines Bildes mit einem Maskenbild die Pixel, die den Nicht-Null-Bereichen in der Maske entsprechen, aus dem Originalbild extrahiert werden, um ein neues zusammengesetztes Bild zu erzeugen
  • Unschärfe : Bildvervielfachung kann zur Unschärfe verwendet werden. Wenn Sie beispielsweise ein Bild mit dem Frequenzgang eines Tiefpassfilters multiplizieren, können Sie hochfrequente Teile des Bilds entfernen, um einen Unschärfeeffekt zu erzielen
  • Spektrumanalyse : Bildvervielfachung kann zur Spektrumanalyse verwendet werden. Beispielsweise kann das Multiplizieren eines Bildes mit einem Hochpassfilter, dessen Frequenzgang der Einheitskreis ist, die Information des Hochfrequenzteils des Bildes extrahieren, wodurch der Hochpassfiltereffekt erzielt wird
  • Rauschentfernung : Bildmultiplikationsoperationen können verwendet werden, um Rauschen aus Bildern zu entfernen. Beispielsweise kann das Multiplizieren eines Bildes mit einem Tiefpassfilter, dessen Frequenzgang der Einheitskreis ist, den hochfrequenten Teil des Bildes entfernen, wodurch Rauschen entfernt wird

B: Programm

MATLAB-Implementierung : Die relevanten Funktionen sind wie folgt, für eine detaillierte Erklärung lesen Sie bitte das MATLAB-Hilfehandbuch

immultiply(A,B,class)Funktion:

  • Aund Bsind jeweils die beiden Eingabebilder
  • class: Wird verwendet, um den Datentyp des Ausgabebildes anzugeben
    • uint8: 8-Bit-Ganzzahl ohne Vorzeichen
    • uint16: 16-Bit-Ganzzahl ohne Vorzeichen
    • int16: 16-Bit-Ganzzahl mit Vorzeichen
    • single: Fließkommatyp mit einfacher Genauigkeit
    • double: Fließkommatyp mit doppelter Genauigkeit

Erzielen Sie die folgenden Effekte
Bildbeschreibung hier einfügen

Back=im2double(imread('bird.jpg'));
Templet=im2double(imread('birdtemplet.bmp'));
result = immultiply(Templet,Back);
subplot(131),imshow(Back),title('背景');
subplot(132),imshow(Templet),title('模板');
subplot(133),imshow(result),title('图像相乘');

Python-Implementierung : Verwenden Sie Python, um dieselbe Funktion wie oben zu erreichen

csv2.multiplyFunktion: Multipliziert zwei Eingabearrays elementweise und schreibt das Ergebnis in das Ausgabearray. Wenn während der Multiplikation der resultierende Wert eines Elements außerhalb des darstellbaren Bereichs des Datentyps des Ausgabearrays liegt, wird das Ergebnis abgeschnitten. Wenn ein Skalierungsparameter angegeben wird scale, wird das Ergebnis so skaliert, dass es in den akzeptablen Bereich für den Datentyp passt. Wenn der Datentyp des Ausgangsarrays nicht angegeben ist, ist der Datentyp des Ausgangsarrays derselbe wie der des Eingangsarrays

  • src1: Das erste Array muss ein Einkanal- oder Mehrkanal-Array sein, und der Datentyp ist Fließkomma oder Ganzzahl.
  • src2: Das zweite Array muss dieselbe Form und denselben Datentyp wie das erste Array haben.
  • dst: Das Ausgabearray mit derselben Form und demselben Datentyp wie das Eingabearray.
  • scale: Optionaler Parameter, ein Skalarwert zum Skalieren des Ergebnisses. Der Standardwert ist 1, was keine Skalierung bedeutet.
  • dtype: optionaler Parameter, der Datentyp des Ausgabearrays. Wenn nicht angegeben, hat das Ausgangsarray den gleichen Datentyp wie das Eingangsarray
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

# 读取背景和模板图片
Back = cv2.imread('bird.jpg').astype(np.float32) / 255.0
Templet = cv2.imread('birdtemplet.bmp').astype(np.float32) / 255.0

# 计算图像相乘
result = cv2.multiply(Templet, Back)

# 展示结果
fig, ax = plt.subplots(1, 3, figsize=(12, 4))
ax[0].imshow(cv2.cvtColor(Back, cv2.COLOR_BGR2RGB))
ax[0].set_title('背景')
ax[1].imshow(cv2.cvtColor(Templet, cv2.COLOR_BGR2RGB))
ax[1].set_title('模板')
ax[2].imshow(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
ax[2].set_title('图像相乘')
plt.show()

Bildbeschreibung hier einfügen

(4) Divisionsbetrieb

A: Überblick

Divisionsoperation : bezieht sich auf das Teilen jedes Pixelwerts eines Bilds durch den entsprechenden Pixelwert eines anderen Bilds, um ein neues Bild zu erzeugen. Dann kann ihre Divisionsoperation ausgedrückt werden als

g ( x , y ) = f 1 ( x , y ) ÷ f 2 ( x , y ) g(x,y)=f_{1}(x,y) ÷ f_{2}(x,y)g ( x ,j )=F1( x ,j )÷F2( x ,j )

Die Bildteilung hat in einigen Anwendungen weniger Nutzen als Addition, Subtraktion und Multiplikation, kann aber in bestimmten Situationen nützlich sein. In einigen Bildverarbeitungsanwendungen kann die Bildteilung verwendet werden, um Probleme wie ungleichmäßige Beleuchtung oder Farbverzerrung im Bild zu korrigieren. Beispielsweise kann in der medizinischen Bildverarbeitung ein Hintergrundbild verwendet werden, um ein Bild zu teilen, das Objekte enthält, um Beleuchtungsänderungen oder andere Ablenkungen zu entfernen. Darüber hinaus kann die Bildteilung auch zur Bildkontrastverbesserung verwendet werden. Bei Anwendungen zur Kontrastverbesserung kann die Bildteilung verwendet werden, um hochfrequente Details in Bildern wie Kanten und Texturen zu verbessern. Indem ein Bild durch seine geglättete Version geteilt wird, können hochfrequente Informationen verbessert und Kanten und Texturen deutlicher sichtbar gemacht werden

B: Programm

MATLAB-Implementierung : Die relevanten Funktionen sind wie folgt, für eine detaillierte Erklärung lesen Sie bitte das MATLAB-Hilfehandbuch

imdivide(A,B,options)Funktion: ist eine Bildverarbeitungsfunktion in MATLAB

  • Aund Bsind die beiden Eingangsbildmatrizen. Es sollte beachtet werden, dass, wenn der Wert eines Pixels in 0 ist, der Wert des Bentsprechenden Pixels im Ausgabebild (unendlich) sein wird. Wenn die Eingangsmatrix Gleitkommazahlen enthält, ist die Ausgangsmatrix auch Gleitkommazahlen, andernfalls hat die Ausgangsmatrix denselben Datentyp wie die EingangsmatrixCInf
  • optionsDie Struktur enthält die folgenden Felder
    • RoundingMethod: Der Wert kann sein 'floor'(abgerundet, Standardwert), 'ceil'(aufgerundet), 'fix'(gerundeter Teil), 'round'(gerundet), Geben Sie die Rundungsmethode für die Division an.
    • NaNBehavior: Der Wert kann 'omit'(NaN weglassen, der Standardwert) oder 'replace'(NaN durch 0 ersetzen) sein, was angibt, wie mit Bdem Fall umgegangen wird, dass NaN enthalten ist

Python-Implementierung : Verwenden Sie Python, um dieselbe Funktion wie oben zu erreichen. Es ist zu beachten, dass c2.dividedie Funktion die Angabe der Rundungsmethode oder der Behandlungsmethode von NaN nicht unterstützt. Wenn Sie diese Funktionen implementieren müssen, müssen Sie den zu implementierenden Code manuell schreiben

cv2.divide(src1, src2, dst=None, scale=1)Funktion:

  • src1und src2sind die beiden Eingangsbilder
  • scaleDer Parameter ist ein Skalar, der src2den zu dividierenden Skalierungsfaktor darstellt, der Standardwert ist 1

Zwei: Bildlogikoperation

(1. Übersicht

Logische Operationen : In der digitalen Bildverarbeitung beziehen sich logische Operationen auf die Operation des Kombinierens von zwei oder mehr Bildern unter Verwendung logischer Operationen. Diese Operationen werden auch als Bitoperationen bezeichnet, da sie auf die einzelnen Bits jedes Pixels im Bild wirken. Zu den logischen Operationen, die üblicherweise in der digitalen Bildverarbeitung verwendet werden, gehören

  • UND-Operation (AND) : Bei dieser Operation werden entsprechende Pixel in zwei Eingangsbildern verglichen. Wenn beide Pixel ungleich Null sind (Wert 1), wird das Ausgangspixel auf 1 gesetzt. Andernfalls wird das Ausgangspixel auf 0 gesetzt ( solange 0 vorkommt, ist das Ergebnis 0 )
  • Oder-Operation (ODER) : Bei dieser Operation werden entsprechende Pixel in zwei Eingangsbildern verglichen. Wenn eines der Pixel den Wert 1 hat, wird das Ausgangspixel auf 1 gesetzt. Andernfalls wird das Ausgabepixel auf 0 gesetzt ( solange eine 1 vorhanden ist, ist das Ergebnis 1 )
  • Exklusiv-ODER-Operation (XOR) : Bei dieser Operation werden entsprechende Pixel in zwei Eingangsbildern verglichen. Wenn die Pixel unterschiedliche Werte haben (ein Pixel ist 1 und das andere ist 0), wird das Ausgangspixel auf 1 gesetzt. Andernfalls wird das Ausgabepixel auf 0 gesetzt ( 0 und eine beliebige Zahl XOR ist eine beliebige Zahl, eine beliebige Zahl XOR mit sich selbst ist 0 )
  • Negationsoperation (NOT) : Bei dieser Operation wird jedes Pixel im Eingabebild invertiert. Wenn ein Pixel den Wert 1 hat, wird es auf 0 gesetzt und umgekehrt

(2) Programm

MATLAB-Implementierung : Die relevanten Funktionen sind wie folgt, für eine detaillierte Erklärung lesen Sie bitte das MATLAB-Hilfehandbuch

  • C = bitcmp(A): bitweise Negation
  • C = bitand(A,B): bitweises UND
  • C = bitor(A,B): bitweises ODER
  • C = bitxor(A,B): bitweises XOR

Erzielen Sie die folgenden Effekte

Bildbeschreibung hier einfügen

Back=imread('bird.jpg');
Templet=imread('birdtemplet.bmp');
result1=bitcmp(Back);
result2=bitand(Templet,Back);
result3=bitor(Templet,Back);
result4=bitxor(Templet,Back);
figure;
subplot(121),imshow(Back),title('Back');
subplot(122),imshow(Templet),title('Templet');
figure;
subplot(221),imshow(result1),title('图像求反');
subplot(222),imshow(result2),title('图像相与');
subplot(223),imshow(result3),title('图像相或');
subplot(224),imshow(result4),title('图像异或');

Python-Implementierung : Verwenden Sie Python, um dieselbe Funktion wie oben zu erreichen

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

Back = cv2.imread('bird.jpg')
Templet = cv2.imread('birdtemplet.bmp')


result1 = cv2.bitwise_not(Back)
result2 = cv2.bitwise_and(Templet, Back)
result3 = cv2.bitwise_or(Templet, Back)
result4 = cv2.bitwise_xor(Templet, Back)


plt.subplot(221), plt.imshow(result1), plt.title('图像求反')
plt.subplot(222), plt.imshow(result2), plt.title('图像相与')
plt.subplot(223), plt.imshow(result3), plt.title('图像相或')
plt.subplot(224), plt.imshow(result4), plt.title('图像异或')
plt.show()

Bildbeschreibung hier einfügen

Je suppose que tu aimes

Origine blog.csdn.net/qq_39183034/article/details/129908984
conseillé
Classement