我想查找圖像中每個像素座標與橢圓的距離。找到一個點到橢圓的距離,其橢圓的內部或外部
要找到距離,我使用下面的公式,其中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;}
這是我得到的輸出。灰色區域應該在粉紅色的橢圓中。
什麼是你的橢圓的「角度」(θ)?也許你對度/弧度感到困惑? – anatolyg
歡迎來到SO! 「cos」,「sin」和「PI」的聲明是什麼? –
我仍然在看你的問題,但首先得到一個快速建議。平方根很昂貴,特別是當你做這些很多時。如果要檢查sqrt(X)
Sniggerfardimungus