Integrales Bild

Bei einem integralen Bild repräsentiert jedes Pixel die kumulative Summe eines entsprechenden Eingabepixels mit allen Pixeln oberhalb und links des Eingabepixels. Es ermöglicht eine schnelle Berechnung von Summationen über Bildunterregionen. Jede rechteckige Teilmenge eines solchen Teilbereichs kann in konstanter Zeit ausgewertet werden.

Dieses Konzept wurde von Viola & Jones eingeführt und wird auch als summierte Flächentabelle bezeichnet. ermöglichen eine schnelle Berechnung von rechteckigen Bildmerkmalen, da sie die Summierung von Bildwerten über einen beliebigen rechteckigen Bildbereich in konstanter Zeit ermöglichen, d.h. Berechnungskomplexität von O (1) anstelle von O (n).

Ein integrales Bild ist definiert als

https://computersciencesource.files.wordpress.com/2011/05/sxyeq.png

https://computersciencesource.files.wordpress.com/2011/05/sxyeq.png

Gleichung zur Berechnung des Integrals am Pixel (x, y)

Die SAT-Methode hat

  • Raumkomplexität: O (M * N)
  • Zeitkomplexität für die Bereichssummenabfrage: O (1)
  • Zeitkomplexität zum Aktualisieren eines Werts in der Matrix: O (M * N)
  • Berechnet effizient die Statistiken wie Mittelwert, Standardabweichung usw. in jedem rechteckigen Fenster

Integrale Bildberechnung

Berechnungstechnik

Schnelle Flächenberechnung

Flächenberechnung für rechteckige Teilregion des Bildes

Summe = Unten rechts + oben links – oben rechts – unten links

Verwendet

  • regionsbasierte statistische misst z.B. Flächensummen, Kovarianz, Co-occurrence Matrix
  • Texture Mapping
  • Erkennung von Feature — HAAR
  • adaptive threshold
  • Stereo correspondence
  • Das Konzept der integralen Bilder kann leicht auf kontinuierliche Domäne (unter Verwendung von Grenzwerten) und mehrdimensionale Bilder erweitert werden.
  • O(1) Bilateral mit konstanten räumlichen Filtern

Code

class NumMatrix {
public:
vector<vector<int>> sat;
bool empty=true;
NumMatrix(vector<vector<int>> &img) {
int row = img.size();
if(row == 0) return;
int col = img.size();
if(col == 0) return;
empty = false;
sat = vector<vector<int>>(row + 1, vector<int>(col + 1));
for(int i = 1; i <= row; i++)
for(int j = 1; j <= col; j++)
sat = sat + sat - sat + img;
}
int sumRegion(int row1, int col1, int row2, int col2) {
return empty? 0 : sat - (sat + sat - sat);
}
};

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.