0

impoly 関数で関心領域をマークした強度画像があります。ポリゴンがまだ含まれている最小の四角形の頂点を返すコードがあります。長方形は、ほとんどの場合、軸に整列していません。長方形内のデータをマトリックス形式で受け取りたいと思います。長方形の最大辺と x 軸の間の角度を調べてから、画像を回転させて、長方形が軸に揃えられるようにしようとしています。 .四角形内の値をマトリックスに抽出する方法に関するヘルプや新しいアイデアを本当に感謝します。ここに私のコードの一部があります:

filename = uigetfile; %get the file name
obj = VideoReader(filename);
nFrames=obj.NumberOfFrames;
thisfig = figure();

 for k = 1 : nFrames  
this_frame = read(obj, k);
thisax = axes('Parent', thisfig);
image(this_frame, 'Parent', thisax);
if k==nFrames
title(thisax, sprintf('Frame #%d', k));
end

if k==1
    result=input('How many polygons would you like to draw? ');
    for i=1:result
    handle=impoly;
    accepted_pos = wait(handle);
    BW = createMask(handle); 
    sparse_image=sparse(BW);
    [XX, YY] = find(sparse_image);
    [rectx,recty]=minboundrect(XX,YY); %the function that returns the vertices of the rectangle

  points=[rectx(1),rectx(2),rectx(3),rectx(4);recty(1),recty(2),recty(3),recty(4)]
  distance1=((points(1,2)-points(1,1))^2+(points(2,2)-points(2,1))^2)^0.5;
  distance2=((points(1,3)-points(1,2))^2+(points(2,3)-points(2,2))^2)^0.5;

   if(distance1>distance2) %which side of the rectangle is the largest
      vector=[points(1,2)-points(1,1),points(2,2)-points(2,1)];
   else
      vector=[points(1,3)-points(1,2),points(2,3)-points(2,2)];
   end
   angleInDegrees = atan2(vector(2), vector(1)) * 180 / pi; %supposed angle between the largest side and the x axis

    end
end

明確にするために、ビデオを取得してフレームに分割し、ビデオのすべてのフレームの特定の領域を追跡する必要があります。私はビデオを扱っていますが、それをフレームに分割しているので、実際には画像を扱っています。私が得た長方形は、ほとんどの場合傾いています。つまり、画像の軸と整列していません。

4

1 に答える 1