In Java? Schau dir mal folgenden Link an:

http://ltu164.ltu.edu/itseng/version.htm

damit hats bei mir auch geklappt. Ich hab jetzt allerdings nen neues Problem: Ich hab mein Webcambild in ein Schwarzweissbild umgewandelt und die RGB-Werte jedes Pixels in ein int[][] gespeichert. (Genauer gesagt nur einen Wert, weil bei einem S/W-Bild ja R = B = G ist. Auf diesem Array wollte ich nun verschiedene Operationen testen, als erstes den Sobel.

Hier der Code:

Code:
ActionListener sobelmebaby = new ActionListener()   {
					
					
					public void actionPerformed(ActionEvent e) {
						int [][] sobelarray = new int[grayImage.getWidth()][grayImage.getHeight()];
														  
						for(int i = 0;i<grayImage.getWidth();i++){
							for(int j = 0;j<grayImage.getHeight();j++){
								sobelarray [i][j] = (((grayImage.getRGB(i,j))>>16& 0xFF)+0);
							}
						}
						
						//Faltungskern:
						//11,12,13
						//21,22,23
						//31,32,33
						
						int sobel_11 = 0;
						int sobel_12 = -1;
						int sobel_13 = 0;
						int sobel_21 = -1;
						int sobel_22 = -4;
						int sobel_23 = -1;
						int sobel_31 = 0;
						int sobel_32 = -1;
						int sobel_33 = 0;
						int workpixel;
						
						if(grayImage != null){
							for(int i = 2;i<318;i++){
								for(int j = 2;j<238;j++){
									//System.out.println("i: "+i+" ,j: "+j);
									sobelarray[i][j] = sobelarray[i][j] + sobel_22;
									
									sobelarray[i-1][j-1] = sobelarray[i-1][j-1] + sobel_11;
									sobelarray[i][j-1] = sobelarray[i][j-1] + sobel_12;
									sobelarray[i+1][j-1] = sobelarray[i+1][j-1] + sobel_13;
									sobelarray[i-1][j] = sobelarray[i-1][j] + sobel_21;
									
									sobelarray[i+1][j] = sobelarray[i+1][j] + sobel_23;
									sobelarray[i-1][j+1] = sobelarray[i-1][j+1] + sobel_31;
									sobelarray[i][j+1] = sobelarray[i][j+1] + sobel_32;
									sobelarray[i+1][j+1] = sobelarray[i+1][j+1] + sobel_33;
																							}
													}
							
							
											 
						for(int i = 2;i<320;i++){
							for(int j = 2;j<240;j++){
								workpixel = sobelarray [i][j];
								Color farbe = new Color (workpixel,workpixel,workpixel);
								grayImage.setRGB(i,j,farbe.getRGB());
													}
												}
						}
						System.out.println("Sobeling... done");
						outcanvas.repaint();
					 }
					};
Also als erstes wird halt das Array aus dem Grayimage (ein BufferedImage als BYTE_GREY) erzeugt. Dann die Sobel-Operationen am Array vorgenommen und dann das Array wieder in das BufferedImage geschrieben. Ich gehe den Weg über das Array, weils übersichtlicher und Afaik auch schneller ist.

Ich hab nun schon verschiedene Faltungskerne aus dem www probiert, darunter auch den von Wikipedia und bin bisher nur zu dem Ergebnis gekommen, dass das Bild von Schritt zu Schritt dunkeler wird... Bis mir irgendwann die Farbwerte von Color "out of bounds" gehen. Was ist an meinem Code falsch, dass das nicht funktioniert...? Ich vermute es liegt daran, WIE ich die Sobel-Faltung vornehme...