Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Die Artikel ::  Grundlegende Algorithmen in der Bildverarbeitung  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5, 6
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
McNeal
Unregistrierter




Beitrag McNeal Unregistrierter 23:59:15 09.06.2009   Titel:   gauss filter            Zitieren

hallo,

ich brauche für ein Projekt einen 3d gauss filter in c++ ....hat da vll jemand nen code? oder kann man für ein 3d objekt auch einen 2d filter verwenden?
Den in 2d findet man ja hier schon...vll kann man den auch einfach umschreiben nur meiner einer ist dazu leider nicht im stande :( .

lg
pumuckl
Moderator

Benutzerprofil
Anmeldungsdatum: 21.06.2005
Beiträge: 6320
Beitrag pumuckl Moderator 09:19:12 10.06.2009   Titel:   Re: gauss filter            Zitieren

McNeal schrieb:
vll kann man den auch einfach umschreiben nur meiner einer ist dazu leider nicht im stande :(


Dann fang doch einfach schonmal an damit und wenn du dann tatsächlich auf Probleme stößt fragst du im entsprechenden Forum nach. Eine Fertiglösung wirst du hier im Forum wohl kaum einfach vorgesetzt bekommen.

_________________
Du brauchst Hilfe? - Kleines Einmaleins der Forenregeln.
When your hammer is C++, everything begins to look like a thumb. (Steve Haflich)
Gregor
Moderator

Benutzerprofil
Anmeldungsdatum: 16.01.2002
Beiträge: 7442
Beitrag Gregor Moderator 12:51:10 26.06.2009   Titel:   Re: gauss filter            Zitieren

McNeal schrieb:

ich brauche für ein Projekt einen 3d gauss filter in c++ ....hat da vll jemand nen code? oder kann man für ein 3d objekt auch einen 2d filter verwenden?
Den in 2d findet man ja hier schon...vll kann man den auch einfach umschreiben nur meiner einer ist dazu leider nicht im stande :( .

Guck Dir mal die Vigra-Bildverarbeitungsbibliothek an. Die ist ausgesprochen gut und realisiert viele Algorithmen für den allgemeinen Fall von n-dimensionalen Bildern. Einen Gauss-Filter für dreidimensionale Bilder findest Du da auf jeden Fall.

_________________
"The problem with quotes on the Internet is that it is hard to verify their authenticity" - Abraham Lincoln


Zuletzt bearbeitet von Gregor am 12:52:38 26.06.2009, insgesamt 1-mal bearbeitet
morganlefay
Unregistrierter




Beitrag morganlefay Unregistrierter 13:55:21 29.01.2010   Titel:   Mittelwert            Zitieren

Hallo!
Habe auch ein kleines Problem:

Will einen Mittelwertfilter beliebiger Größe separieren, also erst die Zeilen und danach die Spalten durchlaufen. Das ganze ist über Borland c++ geschrieben und hab ne eigene Klasse, die mein geladenes Bild in einen Array des Typs unsigned char. Hier mal der Code:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Image* Image::MWSep(int Maske){
  if (Maske % 2 == 0) { //Es sollen nur ungrade Filtergrößen zugelassen werden
  return 0;
  }

  int radius = Maske / 2;
  int pixel; //Zum Hochzählen
  Image* ci = new Image( width, height,format); //2 neue Images angelegt, um das jeweilige Ergebnisbild zu speichern
  Image* cj = new Image( width, height,format);
//MW Filter Spalten
  for (int i = 0; i < chanel; i++) {                    // Alle Kanäle
    for (int j = 0; j < height ; j++) {            // Alle Zeilen
      for (int k = 0; k < width ; k++) {    // Alle Spalten
        if(k<radius||k>height-radius){     //Rand bekommt das Ursprungsbild
          ci->Data[i][j*width+k]=Data[i][j*width+k];
        }
        else{
        //eigendlicher Mittelwertfilter, über alle Zeilen
    pixel = 0;
    for(int l=k-radius; l<= k+radius; l++){ //Zeilen
        pixel+= Data[i][l*width+j];
     }
      ci->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
    }
    }
  }
}
    //MW Filter Über alle Spalten
      for (int i = 0; i < chanel; i++) {                    // Alle Kanäle
        for (int j = 0; j < height ; j++) {            // Alle Zeilen
          for (int k = 0; k < width ; k++) {    // Alle Spalten
            if(k<radius||k>width-radius){      //Randbehandlung
               cj->Data[i][j*width+k]=Data[i][j*width+k];
            }
           else{

          pixel = 0;
          for(int l=k-radius; l<= k+radius; l++){  //Spalten
            pixel+= ci->Data[i][j*width+l];
          }
         cj->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
      }
   }
  }
}
  delete ci;
  return cj;

 }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Image* Image::MWSep(int Maske){
if (Maske % 2 == 0) { //Es sollen nur ungrade Filtergrößen zugelassen werden
return 0;
}

int radius = Maske / 2;
int pixel; //Zum Hochzählen
Image* ci = new Image( width, height,format); //2 neue Images angelegt, um das jeweilige Ergebnisbild zu speichern
Image* cj = new Image( width, height,format);
//MW Filter Spalten
for (int i = 0; i < chanel; i++) { // Alle Kanäle
for (int j = 0; j < height ; j++) { // Alle Zeilen
for (int k = 0; k < width ; k++) { // Alle Spalten
if(k<radius||k>height-radius){ //Rand bekommt das Ursprungsbild
ci->Data[i][j*width+k]=Data[i][j*width+k];
}
else{
//eigendlicher Mittelwertfilter, über alle Zeilen
pixel = 0;
for(int l=k-radius; l<= k+radius; l++){ //Zeilen
pixel+= Data[i][l*width+j];
}
ci->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
}
}
}
}
//MW Filter Über alle Spalten
for (int i = 0; i < chanel; i++) { // Alle Kanäle
for (int j = 0; j < height ; j++) { // Alle Zeilen
for (int k = 0; k < width ; k++) { // Alle Spalten
if(k<radius||k>width-radius){ //Randbehandlung
cj->Data[i][j*width+k]=Data[i][j*width+k];
}
else{

pixel = 0;
for(int l=k-radius; l<= k+radius; l++){ //Spalten
pixel+= ci->Data[i][j*width+l];
}
cj->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
}
}
}
}
delete ci;
return cj;

}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Image* Image::MWSep(int Maske){
  if (Maske % 2 == 0) { //Es sollen nur ungrade Filtergrößen zugelassen werden
  return 0;
  }

  int radius = Maske / 2;
  int pixel; //Zum Hochzählen
  Image* ci = new Image( width, height,format); //2 neue Images angelegt, um das jeweilige Ergebnisbild zu speichern
  Image* cj = new Image( width, height,format);
//MW Filter Spalten
  for (int i = 0; i < chanel; i++) {                    // Alle Kanäle
    for (int j = 0; j < height ; j++) {            // Alle Zeilen
      for (int k = 0; k < width ; k++) {    // Alle Spalten
        if(k<radius||k>height-radius){     //Rand bekommt das Ursprungsbild
          ci->Data[i][j*width+k]=Data[i][j*width+k];
        }
        else{
        //eigendlicher Mittelwertfilter, über alle Zeilen
    pixel = 0;
    for(int l=k-radius; l<= k+radius; l++){ //Zeilen
        pixel+= Data[i][l*width+j];
     }
      ci->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
    }
    }
  }
}
    //MW Filter Über alle Spalten
      for (int i = 0; i < chanel; i++) {                    // Alle Kanäle
        for (int j = 0; j < height ; j++) {            // Alle Zeilen
          for (int k = 0; k < width ; k++) {    // Alle Spalten
            if(k<radius||k>width-radius){      //Randbehandlung
               cj->Data[i][j*width+k]=Data[i][j*width+k];
            }
           else{

          pixel = 0;
          for(int l=k-radius; l<= k+radius; l++){  //Spalten
            pixel+= ci->Data[i][j*width+l];
          }
         cj->Data[i][j*width+k]=(double) pixel /Maske + 0.5;
      }
   }
  }
}
  delete ci;
  return cj;

 }


Hier mein Problem: Wenn ich den Filter ausführe, ist mein Bild um 90° gedreht, und ich habe echt überhaupt keine Ahnung, warum!!!

Wäre nett, wenn mir einer helfen könnte...

Gruß Aeris
knivil
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 4054
Beitrag knivil Mitglied 15:27:22 30.01.2010   Titel:              Zitieren

Zitat:
schneller als

Also die Performancediskussion ... MMX und SSEx sind wie geschaffen fuer diese Operationen. Auch kann man es direkt auf seiner Grafikkarte ueber Shader realisieren.

Zum geposteten Code: Ich persoenlich finde ihn nicht schoen. Was solls ...

_________________
If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
morganlefay
Unregistrierter




Beitrag morganlefay Unregistrierter 18:13:15 30.01.2010   Titel:              Zitieren

Was soll ich machen? Ist ein programmierprojekt und das muss halt drin sein...
C/C++ Forum :: Die Artikel ::  Grundlegende Algorithmen in der Bildverarbeitung  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5, 6
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.