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



我尝试使用 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);

其中角θ是10的常数块。上面的代码是"affine2d"函数示例的示例。它返回我以下错误:

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

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

编辑:我解决了它:我使用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. 

事实上,在平移之后,"新"图像框架原点是(X,Y)点,Rotate块将其旋转(X,Y)。

计算机视觉系统工具箱包括一个名为"应用几何变换"的块,它将满足您的需求,并为您省去使用 MATLAB 功能块的麻烦。

编辑:"应用几何变换"块已从 R2015b 版本起已弃用。请改用变形块。

当图像扭曲/旋转时,其中的行数和/或列数将发生变化。

您需要修改代码,以便输出图像的大小是可变的。为此,请在编辑器中打开代码(用于 MATLAB 功能块),然后打开"编辑数据"对话框。在左侧列中选择输出图像,然后

  1. 选中"可变大小"复选框
  2. 输入类似 [400 400 3] 的内容作为大小

您必须对预期的最大行和列大小进行最佳猜测。

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

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

最新更新