首页 文章

使用MATLAB功能块进行几何变换

提问于
浏览
2

我尝试使用Simulink中的MATLAB功能块对视频应用几何变换 . 我将“从多媒体文件”块连接到MATLAB功能块,并将其输出连接到“到视频显示”块 . 内部MATLAB功能块此代码:

function outputImage = fcn(inputImage,theta)


coder.extrinsic('affine2d')
coder.extrinsic('imwarp')
outputImage = coder.nullcopy(inputImage);


tform = affine2d([cosd(theta) -sind(theta) 0; sind(theta) cosd(theta) 0; 0 0 1]);

outputImage = imwarp(inputImage,tform);

其中角度theta是10的常量块 . 上面的代码是来自'affine2d'函数示例的示例 . 它返回以下错误:

Size mismatch for MATLAB expression 'imwarp'. Expected = 120x160x3 Actual = 146x179x3 Block MATLAB Function (#108) While executing: State During Action

但我不明白错误在哪里(为什么实际= 146x179x3) . 输入视频是来自CV工具箱演示的RGB视频文件('vipmen.avi') .

EDIT: 我解决了它:我使用 Apply Geometric Transformation 块进行翻译,使用 Rotate 块进行旋转:

H = [1 0; 0 1; Ox-X  Oy-Y] %where Ox,Oy are image framework origin coordinates and X,Y are offset coordinates.

实际上,在翻译之后,"new"图像框架原点是(X,Y)点, Rotate 块围绕(X,Y)旋转它 .

3 回答

  • 3

    计算机视觉系统工具箱包含一个名为Apply Geometric Transformation的块,它可以满足您的需求并省去了使用MATLAB功能块的麻烦 .

    Edit: 自R2015b版本起,不推荐使用Apply Geometric Transformation块 . 请改用Warp块 .

  • 3

    当图像被扭曲/旋转时,其中的行和/或列的数量将改变 .

    您需要修改代码,以便outputImage的大小可变 . 为此,请在编辑器中打开代码(用于MATLAB功能块)并打开“编辑数据”对话框 . 然后在左侧列中选择outputImage

    • 选中"variable size"复选框

    • 输入类似[400 400 3]的大小

    您必须对您期望的最大行和列大小做出最佳猜测 .

    另请注意,Matlab功能块必须具有离散的采样时间才能使用可变大小的信号 . 要设置此项,请右键单击该块并选择“块参数”,然后设置采样时间 .

  • 0

    我试图了解发生了什么 . 变形图像的尺寸与 Output=coder.nullcopy(X) 不同,因此我计算了新变形图像的尺寸,使用 Output=coder.nullcopy(ones(new_row,new_colomn,3)) 创建了一个空白图像

相关问题