Me gustaría encontrar la distancia de cada coordenada de píxel en una imagen a una elipse.Encontrar la distancia de un punto a una elipse, ya sea dentro o fuera de la elipse
Para encontrar la distancia, estoy usando la siguiente fórmula donde p es el punto del píxel y h es la elipse. x, y es la coordenada de píxel, x (c), y (c) es el centro de la elipse, theta es el ángulo de la elipse, alfa y beta son los ejes mayor y menor de la elipse, respectivamente.
El código para determinar la distancia de cada punto a una elipse se muestra a continuación. Si la distancia, D < 1, significa que el punto está dentro de la elipse, en cuyo caso lo hago gris. Si D> 1 significa que el punto está fuera de la elipse, en cuyo caso lo dejo tal como está. Debajo está también la imagen de salida que obtengo. Por alguna razón, creo que mi cálculo de distancia es correcto, pero tengo un problema con mi rotación. Para mí, todo se ve bien, no puedo ver el problema. Por favor ayuda. Lo que necesito es que todos los píxeles de la elipse sean grises, pero para mí el área gris forma una elipse, pero parece que me estoy equivocando con la rotación en alguna parte.
Mat distance2ellipse(Mat image, RotatedRect ellipse){
float distance = 2.0f;
float angle = ellipse.angle;
Point ellipse_center = ellipse.center;
float major_axis = ellipse.height;
float minor_axis = ellipse.width;
Point pixel;
float a,b,c,d;
for(int x = 0; x < image.cols; x++)
{
for(int y = 0; y < image.rows; y++)
{
Scalar intensity = image.at<uchar>(Point(x, y));
pixel.x=x;
pixel.y=y;
a = (cos(angle*PI/180)*(pixel.x-ellipse_center.x))/(major_axis);
b = (sin(angle*PI/180)*(pixel.y-ellipse_center.y))/(minor_axis);
c = (sin(angle*PI/180)*(pixel.x-ellipse_center.x))/(major_axis);
d = (cos(angle*PI/180)*(pixel.y-ellipse_center.y))/(minor_axis);
distance = sqrt(pow((a-b),2)+pow((c+d),2));
if(distance<1)
{
image.at<uchar>(Point(x,y)) = 140;
}
}
}
return image;}
Esta es la salida que obtengo. El área gris debe estar en la elipse rosa.
¿Cuál es el 'ángulo '(theta) de su elipse? Tal vez tienes confusión con grados/radianes? – anatolyg
¡Bienvenido a SO! ¿Cuáles son las declaraciones de 'cos',' sin' y 'PI'? –
Todavía estoy viendo su problema, pero una primera recomendación rápida. Las raíces cuadradas son caras, especialmente cuando haces esto muchas de ellas. Si desea verificar si sqrt (X)
Sniggerfardimungus