Sobel operator and 8 bit paletted image

Started by
1 comment, last by Puyover 14 years ago
Hi! I'm having few problem applying a Sobel filter to an image that I have loaded into the NDS (I'm programming it at libnds). I have to do this in indexed color (paletted 8 bit image). Here is the code I use:
void imageToSobel(u8* bmp, u16* palette, int len, int weight, int height) {
	int i, j;
	int x, y;
	u8 p1, p2, p3, p4, p6, p7, p8, p9;
	u8 R, G, B, gray;

	for(i = 0; i < len/2; i++) {
		R = palette & 0x1F;
		G = (palette >> 5) & 0x1F;
		B = (palette >> 10) & 0x1F;
		gray = div32(30*R, 100) + div32(59*G, 100) + div32(11*B, 100);
		BG_PALETTE = RGB15(gray, gray, gray);
	}
	
	for(i = 0; i < height; i++) {
		for(j = 0; j < weight; j++) {
			p1 = bmp[(i-1)*weight+(j-1)];
			p2 = bmp[(i-1)*weight+j];
			p3 = bmp[(i-1)*weight+(j+1)];
			p4 = bmp[i*weight+(j-1)];
			p6 = bmp[i*weight+(j+1)];
			p7 = bmp[(i+1)*weight+(j-1)];
			p8 = bmp[(i+1)*weight+j];
			p9 = bmp[(i+1)*weight+(j+1)];
			
			x = (p1+(p2+p2)+p3-p7-(p8+p8)-p9);
			y = (p3+(p6+p6)+p9-p1-(p4+p4)-p7);
			BG_GFX[i*weight+j] = sqrt32((x*x) + (y*y));
		}
	}
}

The first for loop converts the image to gray scale, and do it fine. But in the next for is the problem; it's seem that doesn't do correctly... I try the same code but loading a 16 bit image and works fine, so the algorithm is correct... Could somebody help me? I don't know where is the mistake :( Thank you! PD: Sorry about my bad English.
Advertisement
maybe it's just a precision issue.
try:
gray = div32(30*R+59*G+11*B, 100);
That doesn't fix the problem :/
The problem isn't it in the for which change the image into gray scale; is in the second for, which apply the sobel filter :(

This topic is closed to new replies.

Advertisement