Hi!
Ich habe versucht mal selbst einen Sobel - Filter zu programmieren (auch einige andere) ich habe aber bei allen das selbe Problem.
Nämlich sehen meine gefilterten Bilder nicht so aus, wie sie z.b. in AdOculos aussehn.
Ich dachte ich hätte meinen Fehler gefunden, und zwar:
Bei dem Fettgedruckten: da ersetzt ich den aktuellen Pixel ja schon mit dem neuen wert, d.h. beim nächsten durchlauf hat der neue_aktuelle Pixel ja als nachbarn schon einen pixel mit anderen werten, als den Ursprungswert.
Dann dachte ich mir, mach ich es halt so:
und nachdem ich durch das ganze bild gelaufen bin, ersetze ich die alten werte durch die neuen:
Es gibt keine Fehler oder so, aber das Bild sieht unverändert aus. Es schaut aus, wie das original.
Könnt ihr mir sagen, was ich hier übersehn habe?
Bin für jede Hilfe Dankbar
Gruß
Doggy
EDIT: Beim Laplace - Filter wird das Bild komplett schwarz....
Ich habe versucht mal selbst einen Sobel - Filter zu programmieren (auch einige andere) ich habe aber bei allen das selbe Problem.
Nämlich sehen meine gefilterten Bilder nicht so aus, wie sie z.b. in AdOculos aussehn.
Ich dachte ich hätte meinen Fehler gefunden, und zwar:
Code:
void prewitt_filter(UCHAR **img)
{
// Maske : -1 -1 -1 0 0 0 1 1 1
char sw;
cout << "(H) Horizontal\n\n(-1-1-1)\n( 0 0 0) \n( 1 1 1)\n\n" << endl;
cout << "(V) Vertikal\n\n(-1 0 1)\n(-1 0 1)\n(-1 0 1)\n\n" << endl;
cin >> sw;
switch(sw)
{
case 'h': case 'H':{
for(int i =1 ; i<HEIGHT-1 ; ++i)
for(int j=1 ; j<WIDTH-1 ; ++j){
[B]img[i][j] = ((img[i-1][j-1]+img[i-1][j]+img[i-1][j+1])
-
(img[i+1][j-1]+img[i+1][j]+ img[i+1][j+1]))/6;[/B]
}
break; }}}
Bei dem Fettgedruckten: da ersetzt ich den aktuellen Pixel ja schon mit dem neuen wert, d.h. beim nächsten durchlauf hat der neue_aktuelle Pixel ja als nachbarn schon einen pixel mit anderen werten, als den Ursprungswert.
Dann dachte ich mir, mach ich es halt so:
Code:
for(int i=1 ; i<HEIGHT-1 ; ++i)
for(int j=1 ; j<WIDTH-1 ; ++j){
pixel = ((img[i-1][j-1]+2*img[i-1][j]+img[i-1][j+1])
-
(img[i+1][j-1]+2*img[i+1][j]+img[i+1][j+1])) / 8;
vec_sobel.push_back(pixel);
}
und nachdem ich durch das ganze bild gelaufen bin, ersetze ich die alten werte durch die neuen:
Code:
for(int k = 0; k < vec_sobel.size(); ++k)
for(int i =1 ; i<HEIGHT-1 ; ++i)
for(int j=1 ; j<WIDTH-1 ; ++j)
img[i][j] = vec_sobel[k];
Es gibt keine Fehler oder so, aber das Bild sieht unverändert aus. Es schaut aus, wie das original.
Könnt ihr mir sagen, was ich hier übersehn habe?
Bin für jede Hilfe Dankbar
Gruß
Doggy
EDIT: Beim Laplace - Filter wird das Bild komplett schwarz....
Zuletzt bearbeitet:
([code]-Tags verwenden!)