То, что ты сделал, выглядит хорошо для меня ..
Однажды я сделал это, в Java, почти так же.
Получение среднего значения цвета RGB 0-255, чтобы получить шкалу серого, и это выглядит очень похоже на ваше.
public int getGray(int row, int col) throws Exception
{
checkInImage(row,col);
int[] rgb = this.getRGB(row,col);
return (int) (rgb[0]+rgb[1]+rgb[2])/3;
}