画像内のすべてのピクセル座標から楕円までの距離を見つけたいと思います。
距離を見つけるために、次の式を使用しています。ここで、p はピクセルの点、h は楕円です。x,y はピクセル座標、x(c),y(c) は楕円の中心、theta は楕円の角度、alpha と beta はそれぞれ楕円の長軸と短軸です。
楕円までのすべての点の距離を決定するコードを以下に示します。距離が D < 1 の場合、点が楕円の内側にあることを意味します。この場合、点を灰色にします。D > 1 の場合、点が楕円の外側にあることを意味します。この場合、そのままにしておきます。以下は、私が得る出力画像でもあります。なぜか距離計算は合っていると思いますが、回転に問題があります。私にはすべてが正しく見えますが、問題はわかりません。助けてください。私が必要とするのは、楕円内のすべてのピクセルが灰色であることですが、灰色の領域は楕円を形成しますが、どこかで回転が間違っているように見えます。
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;}
これは私が得る出力です。灰色の領域はピンクの楕円の中にあるはずです。