【问题标题】:How do i rotate my image and save data into a matrix?如何旋转图像并将数据保存到矩阵中?
【发布时间】:2013-10-01 18:23:52
【问题描述】:

我有一个强度图像,其中我用 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

明确一点:我得到一个视频并将其分割成帧,我需要关注视频中所有帧中的某个区域。我正在处理一个视频,但我将它分成帧,所以我真的在处理图像。我得到的矩形大部分时间都是倾斜的,即与图像的轴不对齐。

【问题讨论】:

  • 是的!我也有同样的问题!我想了解您写的内容是否适合我,但我不明白您如何计算倾斜矩形的宽度和高度?
  • 查看问题中的图形,了解abcd 是如何定义的。然后它只是欧几里得距离计算。在调试中运行它,看看它做了什么。
  • 顺便说一句,如果您对我对其他问题的回答有意见 - 请在此处发布。

标签: matlab image-processing matrix rotation


【解决方案1】:

令人困惑的问题。 该代码指的是视频,而不是图像。 关于旋转图像的问题?关于从图像中检索子矩阵的问题? 发布的代码真的与问题相关吗? 你试过什么?

来自文档:

this_frame = read(obj, k);

video = read(obj) 从与 obj 关联的文件中读取所有视频帧。 read 方法返回一个 H×W×B×F 矩阵 video,其中 H 是图像帧高,W 是图像帧宽,B 是图像中的波段数(例如, RGB 为 3),F 是读取的帧数。

看来你确实有坐标:

[rectx,recty]=minboundrect(XX,YY);

所以我会说你正在寻找的矩阵是

A = this_frame(rectx(1):rectx(2), recty(1):rectx(y), 1, 1); % Red band

为了清楚起见,请编辑您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2011-01-28
    • 2022-09-30
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多