Formulación del esquema de la imagen mediante progtwigción (preferiblemente, encoding C # / C ++ o pseudo encoding)

Solo me gustaría pedirle ayuda a cualquiera en la lógica y mucho mejor código de muestra para formular el contorno de una imagen.

Para que quede más claro, estoy hablando de una imagen transparente. Digamos que tengo una imagen PNG con una forma de polígono en el medio, o mucho mejor una vista superior de una isla. Ahora, me gustaría rastrear los contornos y establecer un color en él. Al igual que el efecto ‘Stroke’ en Adobe Photoshop.

He logrado hasta ahora, he creado un progtwig que trazaría los contornos. Pero mi problema es que es el escaneo lineal. De izquierda a derecha, luego hacia abajo, luego de izquierda a derecha nuevamente. Estoy seguro de que tienes la idea Quería que el rastreo fluyera, como lo harías manualmente. Al igual que tú con traza un círculo.

El propósito es, para que se utilice como área de activación para desplazar con precisión un polígono. Y también mi problema es si hay dos islas por ejemplo.

Espero que mi consulta sea clara. Cualquier sugerencia, muestras son apreciadas. Pero mucho mejor si está en código ac # o pseudo código con algunas explicaciones.

Muchas gracias por adelantado.

– Adición:

Además, me gustaría (supongo que me he olvidado de mencionar) registrar las coordenadas del trazo de manera secuencial. Así podría manipularlos más tarde. Es por eso que quería hacer la lógica de esquema de una manera fluida. Ese es el algoritmo que estoy buscando específicamente. ¡Muchas gracias!

Una forma es usar un algoritmo general de detección de bordes. Por ejemplo, la detección de bordes Sobel . Sin embargo, no está optimizado para imágenes de dos colores limpias, con suavizado, como el ejemplo a continuación, por lo que produce un resultado un tanto áspero. Para preservar mejor el antialiasing y obtener un resultado uniforme, sugiero el siguiente algoritmo:

Image blurredImg = gaussianBlur(sourceImg, blurRadius = desiredOutlineWidth); const float sharpnessCoef = 0.1; // value may need tuning or may need to // depend on the blur radius Image dilatedImg = from blurredImg, map all pixels with brightness > sharpnessCoef to white and multiply the rest by 1 / sharpnessCoef Image smoothResult = subtract sourceImg from dilatedImg 

Ejemplo:

detección de bordes

Considere utilizar técnicas de procesamiento de imágenes, como esta:

http://www.codeproject.com/KB/cs/Canny_Edge_Detection.aspx