Lo que pides es un reconocedor óptico de patrones o lo que es lo mismo un OCR.
Lo que te voy a comentar es una aproximación que probablemente pueda servirte.
VBasic dispone de un método POINT en los controles PictureBox que permiten capturar el color de un pixel de control definido por sus coordenadas (x, y).
Conocido esto, sabiendo que el valor de color es 0 para negro, &HFFFF para el blanco y suponiendo que conoces de antemano la posición de las posibles marcas de la encuesta, puedes realizar un bucle que escanée esos cuadrados y determine cuanto se aproxima al blanco y cuanto al negro.
Mediante esto puedes realizar una serie de pruebas hasta afinar el algorítmo de reconocimiento.
Por poner un ejemplo y suponiendo que uno de los cuadros de marca se encuentra situado en x=100; y=100 y tiene una dimensión en píxeles de 20x20
Código:
Public Function Marca(x1 as long, y1 as long, x2 as long, y2 as long) as boolean
dim patron as double
dim i as long, j as long
for i = x1 to x2
for j=y1 to y2
patron = patron + me.Picture.pont(i,j)
next j
next i
if int(patron/400) < 15000 then Marca=true else Marca=false
end Function
Si esto no te resulta válido, tendrás que buscar algún comoponente OCR existente en el mercado.
PD: Tienes que pensar que el código es un ejemplo, no tiene porque funcionar 'tal como está' y desde luego será necesario que calibres correctamente la cifra que diferencia algo que se aproxima al blanco o al negro. (Esto es importante pues la imágen puede contener 'ruido' y como con cualquier OCR, tendrás que aceptar un margen de error).