integrální obraz

integrální obraz je místo, kde každý pixel představuje kumulativní součet odpovídajícího vstupního pixelu se všemi pixely nad a vlevo od vstupního pixelu. Umožňuje rychlý výpočet součtů přes podoblasti obrazu. Jakákoli obdélníková podmnožina takové podoblasti může být vyhodnocena v konstantním čase.

tento koncept představil Viola & Jones a je také známý jako Sčítaná tabulka oblastí. umožňují rychlý výpočet pravoúhlých obrazových funkcí, protože umožňují součet hodnot obrazu nad jakoukoli oblast obrazu obdélníku v konstantním čase, tj. výpočetní složitost O(1) místo O (n).

integrální obraz je definován jako

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

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

rovnice pro výpočet integrálu v pixelu (x, y)

metoda SAT má

  • prostorová složitost: O (M * N)
  • časová složitost pro dotaz na součet rozsahu: O (1)
  • časová složitost pro aktualizaci hodnoty v matici: O (M*N)
  • efektivně vypočítává statistiky, jako je průměr, směrodatná odchylka atd., v jakémkoli obdélníkovém okně

výpočet integrálního obrazu

výpočetní technika

rychlý výpočet plochy

výpočet plochy pro obdélníkovou podoblast obrazu

Sum = vpravo dole + vlevo nahoře-vpravo nahoře-vlevo dole

používá

  • statistické údaje založené na regionu měří např. součty ploch, kovarianci, matici souběžného výskytu
  • mapování textur
  • detekce funkce-HAAR
  • adaptivní práh
  • stereofonní korespondence
  • koncept integrálních obrazů lze snadno rozšířit na spojitou doménu (pomocí limitů) a vícerozměrné obrazy.
  • O (1) bilaterální s konstantními prostorovými filtry

kód

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);
}
};

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.