我无法将以下代码转换为C,因为C中的数组索引格式与MATLAB略有不同。如果我能得到一些指针(得到它?)作为如何翻译下面的代码,我将非常感激。我只是坚持以下几行,因为C中的索引不允许我这样做: -
b = a(x:x+1, y:y+1);
a(x:x+1, y:y+1) = b;
我的代码: -
a = [1 2 3 4; 2 3 4 5; 3 4 5 6; 4 5 6 7];
c = dctmtx(2);
q_mtx = [16 11; 12 12];
for x = 1:2:M
for y = 1:2:N
b = a(x:x+1, y:y+1); %<----HOW DO I DO THIS IN C???
b = c*b*c';
b = b./q_mtx ;
a(x:x+1, y:y+1) = b;
end
end
非常感谢您的帮助!谢谢!
答案 0 :(得分:1)
据我所知,没有用于下标数组的内置运算符。
因此,您可以查找合适的库(我认为,对于2D数组,某些图像处理库可以工作,如OpenCV
),或者编写一个代码。
您感兴趣的行很容易翻译成C.
如果在Matlab中你有b = a(x:x+1, y:y+1);
,那么C
就会有四行:
b[0][0]=a[x][y];
b[1][0]=a[x+1][y];
b[0][1]=a[x][y+1];
b[1][1]=a[x+1][y+1];
这里我假设您静态定义了数组(正如您在注释中所写的那样)。 这是Matlab的一个优点 - 使用矩阵非常方便。
编辑:关于您在评论中的问题,对于更大的尺寸,您可以使用for循环:
Matlab代码b = a(x:x+32, y:y+55)
将对应
for(int i=0;i<32;i++)
for(int j=0;j<55;j++)
b[i][j]=a[x+i][y+j];