我尝试使用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')。
编辑:我解决了这个问题:我使用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)旋转。
答案 0 :(得分:3)
当图像变形/旋转时,其中的行数和/或列数将发生变化。
您需要修改代码,以便outputImage的大小可变。 为此,请在编辑器中打开代码(用于MATLAB功能块)并打开“编辑数据”对话框。 在左侧列中选择outputImage,然后选择
您必须对您期望的最大行数和列数进行最佳猜测。
另请注意,Matlab功能块必须具有离散的采样时间才能使用可变大小的信号。 要设置此项,请右键单击该块并选择“块参数”,然后设置采样时间。
答案 1 :(得分:3)
计算机视觉系统工具箱包含一个名为Apply Geometric Transformation的块,它可以满足您的需求并省去使用MATLAB功能块的麻烦。
修改强> 自R2015b版本起,不推荐使用Apply Geometric Transformation块。请改用Warp块。
答案 2 :(得分:0)
我试图了解会发生什么。变形图像的尺寸与Output=coder.nullcopy(X)
不同,因此我计算了新变形图像的尺寸,使用Output=coder.nullcopy(ones(new_row,new_colomn,3))
创建了一个空白图像并且可以正常工作