Algebraische Operationen und logische Operationen von Bildern – Matlab-Implementierung

Algebraische Operationen und logische Operationen von Bildern – Matlab-Implementierung

1. Additionsoperation

Additionsoperationen werden häufig in verschiedenen Situationen verwendet, beispielsweise zur durchschnittlichen Geräuschreduzierung. Die Bildaddition wird im Allgemeinen verwendet, um mehrere Bilder derselben Szene zu mitteln, um additives Rauschen wirksam zu reduzieren. Wenn ein Bild durch eine zufällige Rauschquelle gestört wird, kann das Rauschen durch Mittelung mehrerer Standbilder beseitigt oder reduziert werden.Während des Mittelungsprozesses ändert sich der statische Teil des Bildes nicht, und da das Bildrauschen zufällig ist, sammeln sich verschiedene Rauschmuster sehr langsam an, sodass das zufällige Rauschen durch Mittelung mehrerer Bilder reduziert werden kann. Einfluss.

Wenn M-Bilder gemittelt werden, ist der Rauschunterdrückungseffekt umso besser, je größer M ist.

Fügen Sie einem Bild Gaußsches Rauschen hinzu und entfernen Sie das Rauschen dann durch mehrere Additionen und Mittelwerte . Das Matlab-Programm lautet wie folgt:

%% 把一副图像加上高斯噪声,再通过多次相加求平均的方法去除噪声
% 验证相加次数和降噪效果是否成正比
clc;clear;close all;    % 初始化
I=imread('eight.tif');
J=imnoise(I,'gaussian',0,0.02); % 向这副图片加入高斯噪声
subplot(231);imshow(I);title('原图');
subplot(232);imshow(J);title('加噪声');
[M,N]=size(J);  K=zeros(M,N);   % 产生全零的矩阵,大小与图片的一样
a=100;
for i=1:a
    J=imnoise(I,'gaussian',0,0.02);
    J1=im2double(J);
    K=K+J1; % 相加
end
K=K/a;  % 求平均值
subplot(233);imshow(K);title([num2str(a),'次求平均后的图']);

Die Laufergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Wenn die durchschnittliche Zahl größer ist, ist der Rauschunterdrückungseffekt besser.

Detaillierte Erläuterung der im Code enthaltenen Imnoise-Funktion:

Die Funktion imnoise in MATLAB bedeutet das Hinzufügen von Rauschen, um ein Bild zu verunreinigen, was als Bildfunktion der Rauschverschmutzung bezeichnet wird.

g = imnoise(I,type)
g = imnoise(I,type,parameters)
g = imnoise(I,‘gaussian’,m,v)
g = imnoise(I,‘localvar’,V)
g = imnoise(I,‘localvar’,image_intensity,var)
g = imnoise(I,‘poisson’)
g = imnoise(I,‘salt & pepper’,d)
g = imnoise(I,‘speckle’,v)

f ist das Eingabebild. Die Funktion imnoise wandelt das Bild in ein Doppelbild im Bereich [0,1] um, bevor es Rauschen hinzufügt. Dies muss bei der Festlegung von Geräuschparametern berücksichtigt werden.

g=imnoise(f,'gaussian',m,var) fügt Gaußsches Rauschen mit Mittelwert m und Varianz var zum Bild f hinzu. Der Standardwert ist Rauschen mit Mittelwert m 0 und Varianz var 0,01.

g=imnoise(f,'localvar',V) fügt Gaußsches Rauschen mit einem Mittelwert von 0 und einer lokalen Varianz von V zum Bild f hinzu, wobei V ein Array mit der gleichen Größe wie f ist, das jeweils das ideale Quadrat enthält Punkt. Unterschied.

g=imnoise(f,'localvar',image_intensity,var) fügt Gaußsches Rauschen mit Mittelwert 0 zum Bild f hinzu, wobei die lokale Varianz der Rauschvariable eine Funktion des Intensitätswerts von Bild f ist. Die Parameter image_intensity und var sind Vektoren gleicher Größe. plot(image_intensity,var) zeichnet die funktionale Beziehung zwischen Rauschvarianz und Bildhelligkeit auf. Der Vektor image_intensity muss normalisierte Intensitätswerte im Bereich [0,1] enthalten.

g=imnoise(f,'Salt & Pepper',d) verunreinigt das Bild f mit Salz- und Pfefferrauschen, wobei d die Rauschdichte ist (d. h. der Prozentsatz des Bildbereichs, der Rauschwerte enthält). Daher sind ungefähr d*zahl(f) Pixel betroffen. Die Standardrauschdichte beträgt 0,05.

g=imnoise(f,'speckle',var) fügt dem Bild f mithilfe der Gleichung g=f+n*f multiplikatives Rauschen hinzu, wobei n gleichmäßig verteiltes Zufallsrauschen mit Mittelwert 0 und Varianz var, var ist. Der Standardwert ist 0,04.

g=imnoise(f,'poisson') erzeugt Poisson-Rauschen aus den Daten, anstatt den Daten künstliches Rauschen hinzuzufügen. Um die Poisson-Statistik einzuhalten, muss die Helligkeit der Bilder der Klassen Unit8 und Unit16 mit der Anzahl der Photonen übereinstimmen. Wenn die Anzahl der Photonen pro Pixel größer als 65535 ist, wird ein Bild mit doppelter Genauigkeit verwendet. Der Helligkeitswert variiert zwischen 0 und 1 und entspricht der Anzahl der Photonen geteilt durch 10e12.

2. Subtraktionsoperation

Die Bildsubtraktion wird häufig verwendet, um sich ändernde und sich bewegende Objekte zu erkennen. Die Bildsubtraktionsoperation wird auch als Bilddifferenzoperation bezeichnet . Differenzmethoden können in einfache Differenzmethoden in kontrollierten Umgebungen und auf Hintergrundmodellen basierende Differenzmethoden unterteilt werden. In einer kontrollierten Umgebung oder innerhalb eines kurzen Zeitraums kann der Hintergrund als fest betrachtet werden, und Differentialoperationen können direkt verwendet werden, um sich ändernde oder sich bewegende Objekte zu erkennen.

Das Subtrahieren von Bildern derselben Szene, die zu unterschiedlichen Zeiten aufgenommen wurden, oder von Bildern derselben Szene in verschiedenen Wellenbändern ist die Subtraktionsmethode, bei der es sich tatsächlich um die Subtraktionsoperation des Bildes handelt. Differenzbilder liefern Differenzinformationen zwischen Bildern und können zur Steuerung der dynamischen Überwachung, Erkennung und Verfolgung von sich bewegenden Zielen, zur Eliminierung des Bildhintergrunds und zur Zielerkennung usw. verwendet werden.

Bei der Durchführung von Subtraktionsoperationen an Bildern müssen sich die entsprechenden Punkte der beiden subtrahierten Bilder auf demselben Ziel im Raum befinden. Andernfalls müssen zuerst eine geometrische Kalibrierung und ein Abgleich durchgeführt werden. Wenn eine Szenenserie von Bildern subtrahiert wird, um andere Änderungen zu erkennen, ist es schwierig, eine genaue Ausrichtung sicherzustellen, und eine weitere Analyse ist erforderlich.

Es ist bekannt, dass ein Bild durch Salz- und Pfefferrauschen gestört wird und das Rauschen durch Subtraktionsoperationen extrahiert wird. Der Matlab-Code lautet wie folgt:

%% 已知一副收到椒盐噪声干扰的图片,通过减法运算提取出噪声
clc;clear;close all;    % 初始化
I=imread('C:\Users\xcz\Desktop\matlab_example\Images\lena.jpg');
I1=imnoise(I,'salt & pepper',0.02);
K=imsubtract(I1,I); % 实现两幅图片相减,也可使用imabsdiff函数,从而避免负值为0
K1=255-K;   % 图像求反显示
subplot(131);imshow(I);title('原图');
subplot(132);imshow(I1);title('加椒盐噪声后');
subplot(133);imshow(K1);title('提取的噪声');

Die Laufergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Detaillierte Erläuterung der im Matlab-Code enthaltenen Imsubtract-Funktion:

Der englische Originaltext lautet wie folgt
Fügen Sie hier eine Bildbeschreibung ein

Beachten: Die Imsubtract-Funktion fängt die negativen Wertdaten nach der Subtraktion auf 0 ab, während die Imabsdiff-Funktion die absolute Differenz zwischen den beiden Bildern ermittelt und den negativen Wert nicht auf 0 abfängt. Daher bei der Verwendung, um das Auftreten zu vermeiden von Differenzen Negative Werte, und um zu kleine Unterschiede zwischen den Ergebnissen der Pixelwertberechnung zu vermeiden (wenn das Ergebnis nach der Subtraktion negativ ist, wird es zu 0), wird empfohlen, die Funktion imabsdiff aufzurufen.

3. Multiplikationsoperation

Einfache Multiplikationsoperationen können verwendet werden, um die Graustufe des Bildes zu ändern, um eine Graustufentransformation zu erreichen. Multiplikationsoperationen können auch verwendet werden, um bestimmte Teile des Bildes abzudecken. Die typische Anwendung besteht darin, ein Maskenbild zu erhalten. Für Bereiche, die erhalten bleiben müssen, wird der Wert des Maskenbildes auf 1 gesetzt, und für Bereiche, die unterdrückt werden müssen, wird der Wert des Maskenbildes auf 0 gesetzt. Multiplikation wird manchmal als Technik zur Implementierung der Faltungs- oder Korrelationsverarbeitung verwendet.

Der Matlab-Code ist wie folgt implementiert:

%% 实现图像的乘法运算
clc;clear;close all;    % 初始化
I=imread('moon.tif');
J=immultiply(I,1.2);    % 将此图片乘以1.2
K=immultiply(I,2);      % 将此图片乘以2
subplot(131);imshow(I);title('原图');
subplot(132);imshow(J);title('乘以1.2');
subplot(133);imshow(K);title('乘以2');

Die Laufergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Die im Code enthaltene Immultiplikationsfunktion wird für Bildmultiplikationsoperationen verwendet. Einzelheiten finden Sie im Hilfedokument.

4. Divisionsbetrieb

Eine einfache Divisionsoperation kann verwendet werden, um die Graustufen eines Bildes zu ändern. Eine typische Anwendung von Divisionsoperationen ist die Verhältnisbildverarbeitung. Beispielsweise kann die Divisionsoperation zur Korrektur der nichtlinearen Effekte bildgebender Geräte verwendet werden und wird bei der Verarbeitung spezieller Bildformen (z. B. durch CT dargestellte medizinische Bilder) verwendet. Darüber hinaus wird die Divisionsoperation verwendet, um die räumlichen Effekte des Bilddigitalisierungsgeräts zu eliminieren.

Der Matlab-Code ist wie folgt implementiert:

%% 实现图像的除法运算
clc;clear;close all;    % 初始化
moon=imread('moon.tif');I=double(moon); % 读入图像,并将其数据类型转为double
J=I*0.43+90;K=I*0.1+90;L=I*0.01+90;
moon2=uint8(J);moon3=uint8(K);moon4=uint8(L);
J=imdivide(moon,moon2);K=imdivide(moon,moon3);
L=imdivide(moon,moon4);
subplot(221);imshow(moon);title('原图');
subplot(222);imshow(J,[]);title('J=I*0.43+90');
subplot(223);imshow(K,[]);title('K=I*0.1+90');
subplot(224);imshow(L,[]);title('L=I*0.01+90');

Die Laufergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

5. Logische Operationen

Zu den gängigen logischen Bildoperationen gehören „Und“, „Oder“, „Nicht“ usw. Sie zielen hauptsächlich auf Binärbilder ab und sind im Bereich des Bildverständnisses und der Bildanalyse nützlich. Mithilfe dieser Methode kann eine Vorlage für das Bild bereitgestellt werden, die mit anderen Berechnungsmethoden kombiniert werden kann, um Spezialeffekte zu erzielen.

Zwei Binärbilder sind logisch UND, ODER und NICHT. Der Matlab-Code lautet wie folgt:

%% 两幅二值图像进行逻辑与、或、非
clc;clear;close all; %初始化
A=zeros(128);A(40:67,60:100)=1; % 创建两个矩阵
B=zeros(128);B(50:80,40:70)=1;
C=and(A,B);D=or(A,B);E=not(A); %对A图和B图进行逻辑运算
subplot(231);imshow(A);title('A图');
subplot(232);imshow(B);title('B图');
subplot(233);imshow(C);title('C图,A,B相与');
subplot(234);imshow(D);title('D图,A,B相或');
subplot(235);imshow(E);title('E图,A取反');

Die Laufergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/xcz8023/article/details/126217393
Empfohlen
Rangfolge