我有一个强度图像,其中我用感兴趣的功能标记感兴趣的区域。我有一个代码,让我回到仍然包含我的多边形的最小矩形的顶点。 矩形大部分时间未与轴对齐。我想将矩形内的数据接收到矩阵形式。我一直试图找出矩形的最大边和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
要清楚:我得到一个视频并将其拆分成帧,我需要关注视频中所有帧中的某个区域。我正在处理一个视频,但我将它分成帧,所以我真的处理图像。我得到的矩形大部分时间是倾斜的,即不与我的图像轴对齐。
答案 0 :(得分:0)
令人困惑的问题。 代码指的是视频,而不是图像。 关于旋转图像的问题是什么?关于从图像中检索子矩阵的问题是什么? 发布的代码是否与问题真正相关? 你有什么尝试?
来自doc:
this_frame = read(obj, k);
video = read(obj)从与obj关联的文件中读取所有视频帧。读取方法返回H-by-W-by-B-by-F矩阵视频,其中H是图像帧高度,W是图像帧宽度,B是图像中的波段数(例如, 3表示RGB),F是读取的帧数。
看来你确实有坐标:
[rectx,recty]=minboundrect(XX,YY);
所以我要说你正在寻找的矩阵是
A = this_frame(rectx(1):rectx(2), recty(1):rectx(y), 1, 1); % Red band
为了清晰起见,请修改您的问题。