Chciałbym znaleźć odległość każdej współrzędnej piksela w obrazie do elipsy.Znaleźć odległość punktu do elipsy, należy umieścić wewnątrz lub na zewnątrz elipsy
Aby znaleźć odległość, używam następującej formuły, w której p jest punktem piksela, a h - elipsą. x, y jest współrzędną pikselową, x (c), y (c) jest środkiem elipsy, theta jest kątem elipsy, alfa i beta to odpowiednio oś główna i pomocnicza elipsy.
Kod dla określenia odległości każdego miejsca do elipsy jest pokazany poniżej. Jeśli odległość, D < 1, oznacza to, że punkt znajduje się wewnątrz elipsy, w którym to przypadku sprawię, że będzie szary. Jeśli D> 1, oznacza to, że punkt znajduje się poza elipsą, w takim przypadku pozostawiam go takim, jaki jest. Poniżej znajduje się również wyjściowy obraz, który otrzymuję. Z jakiegoś powodu uważam, że moje obliczenia odległości są prawidłowe, ale mam problem z rotacją. Dla mnie wszystko wygląda dobrze, nie widzę problemu. Proszę pomóż. Potrzebuję tylko, aby wszystkie piksele w elipsie były szare, ale dla mnie szary obszar tworzy elipsę, ale wydaje mi się, że mam gdzieś obrót.
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;}
To jest wynik, który otrzymuję. Szary obszar powinien znajdować się w różowej elipsie.
Co to jest "kąt" (theta) twojej elipsy? Może masz pomieszanie z stopniami/radianami? – anatolyg
Witamy w SO! Jakie są deklaracje 'cos',' sin' i 'PI'? –
Wciąż patrzę na twój problem, ale szybkie pierwsze zalecenie. Korzenie kwadratowe są drogie, zwłaszcza gdy robisz tak wiele z nich. Jeśli chcesz sprawdzić, czy sqrt (X)
Sniggerfardimungus