000
09.07.2007, 13:47 Uhr
Blubber2063
|
Also ich hab folgendes Problem, für Merkmalserkennung in Bildern brauche ich einen Faltungskern der nen Gausschen Weichzeichner auf das Bild legt. Wir hatten einen im Netz gefunden, wollten das jetzt aber noch mal nach den Formeln die im Foliensatz standen probieren damit wir den blur Radius bestimmen können. Wenden wir aber folgende Funktionen an und falten dann mit dem enstehenden Kern kommt das Bild sehr abgedunkelt raus und das war nicht sinn und Zweck der Operation. Vielleicht hat ja einer von euch Ahnung von der Materie und sieht unseren Fehler.
C++: |
void PoiPanel::gaussfilterx(int sizex, int sizey, Matrix& out){ double pi = 2 * asin(1); double const deriv = 1.4; double nenn = 2 * pi * pow(deriv, 4); double nennexp = 2 * pow(deriv, 2); out.resize(sizex, sizey); for( int i = 1; i <= sizex; i++){ for( int j = 1; j <= sizey; j++){ out(i,j) = (-i / nenn) * exp(-((i*i+j*j) / nennexp)); } } }; void PoiPanel::gaussfiltery(int sizex, int sizey, Matrix& out){ double pi = 2 * asin(1); double const deriv = 1.0; double nenn = 2 * pi * pow(deriv, 4); double nennexp = 2 * pow(deriv, 2); out.resize(sizex, sizey); for( int i = 1; i <= sizex; i++){ for( int j = 1; j <= sizey; j++){ out(i,j) = (-j / nenn) * exp(-((i*i+j*j) / nennexp)); } } }; void PoiPanel::betrag(Matrix &img1, Matrix &img2, Matrix&out){ out.resize(img1.Nrows(), img1.Ncols()); for (int i=1; i <= img1.Nrows(); i++) { for (int j=1; j <= img1.Ncols(); j++) { out(i,j) = sqrt(img1(i,j)*img1(i,j)+img2(i,j)*img2(i,j)); } } };
|
Wobei hier aus den beiden Filtern mit der betrags Funktion der Faltungskern gemacht wird. |