home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Canny-Kantendetektor

Der Canny Kantendetektor Ist einer der bekanntesten und robustesten Algorithmen der digitalen Bildverarbeitung, der  sehr weit verbreitet ist und als optimaler Kantendetektor gilt. Er liefert idealerweise dem Benutzer ein Bild, dass nur noch die Kanten des Ausgangsbildes enthält.  Hierbei wird der minimalste Abstand zwischen Kantenpunkten und tatsächlichen Kanten gewählt.

Der Algorithmus ist darauf ausgelegt nur mit Graubildern zu arbeiten, daher müssen vor der eigentlichen Ausführung des Algorithmus farbige Bilder ggf. in Graubilder überführt werden. In diesen Grauwertbildern sind Kanten durch große Helligkeitsschwankungen zwischen zwei benachbarten Pixeln charakterisiert.

/**
	 * 
	 * Generates a grey picture, if picture is in RGB colors
	 * 
	 */
	private void readLuminance() {
		int type = sourceImage.getType();
		if (type == BufferedImage.TYPE_INT_RGB
				|| type == BufferedImage.TYPE_INT_ARGB) {
			int[] pixels = (int[]) sourceImage.getData().getDataElements(0, 0,
					width, height, null);
			for (int i = 0; i < picsize; i++) {
				int p = pixels[i];
				int r = (p & 0xff0000) >> 16;
				int g = (p & 0xff00) >> 8;
				int b = p & 0xff;
				data[i] = luminance(r, g, b);
			}
		} else if (type == BufferedImage.TYPE_BYTE_GRAY) {
			byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0,
					0, width, height, null);
			for (int i = 0; i < picsize; i++) {
				data[i] = (pixels[i] & 0xff);
			}
		} else if (type == BufferedImage.TYPE_USHORT_GRAY) {
			short[] pixels = (short[]) sourceImage.getData().getDataElements(0,
					0, width, height, null);
			for (int i = 0; i < picsize; i++) {
				data[i] = (pixels[i] & 0xffff) / 256;
			}
		} else if (type == BufferedImage.TYPE_3BYTE_BGR) {
			byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0,
					0, width, height, null);
			int offset = 0;
			for (int i = 0; i < picsize; i++) {
				int b = pixels[offset++] & 0xff;
				int g = pixels[offset++] & 0xff;
				int r = pixels[offset++] & 0xff;
				data[i] = luminance(r, g, b);
			}
		} else {
			throw new IllegalArgumentException("Unsupported image type: "
					+ type);
		}
	}


>weiter zum Applet