移动一个矩阵
Shifting a matrix
我使用这个函数来移动矩阵的元素。我在1-3象限和2 -4象限之间移动。它对偶数N值很有效,但对于奇数N,它对最后一个元素不起作用。我需要使用这个移位因为我必须在傅里叶变换
之后使用void ftshifting(double **filter,int rows,int cols){
int r2,c2,tmp1_3,tmp2_4;
r2 = rows/2;
c2 = cols/2;
for (int i = 0; i<r2; i++){
for (int k = 0; k<c2; k++){
tmp1_3 = filter[i][k];
filter[i][k] = filter[i+r2][k+c2];
filter[i+r2][k+c2] = tmp1_3;
tmp2_4 = filter[i+r2][k];
filter[i+r2][k] = filter[i][k+c2];
filter[i][k+c2] = tmp2_4;
}
}
}
假设我已经理解你想要做什么,我认为你需要改变这些行:
r2 = rows/2;
c2 = cols/2;
:
r2 = (rows+1)/2;
c2 = (cols+1)/2;
所以在奇数矩阵中,中间的行和列将被忽略,而不是最后一行和列。
话虽如此,你的循环在奇数情况下会走得太远,所以你仍然需要使用原来的rows/2和cols/2作为循环范围。
for (int i = 0; i<rows/2; i++){
for (int k = 0; k<cols/2; k++){
作为参考,下面是更新后整个函数的样子:
void ftshifting(double **filter,int rows,int cols){
int r2,c2,tmp1_3,tmp2_4;
r2 = (rows+1)/2;
c2 = (cols+1)/2;
for (int i = 0; i<rows/2; i++){
for (int k = 0; k<cols/2; k++){
tmp1_3 = filter[i][k];
filter[i][k] = filter[i+r2][k+c2];
filter[i+r2][k+c2] = tmp1_3;
tmp2_4 = filter[i+r2][k];
filter[i+r2][k] = filter[i][k+c2];
filter[i][k+c2] = tmp2_4;
}
}
}
相关文章:
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 将 std::array 移动到另一个 std::array
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何将所有指针从一个向量移动到另一个向量?
- 给定一个右值,为什么移动ctor比常量复制ctor更匹配
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 在数组的开头添加一个元素并移动其余元素,但保留大小
- 将列表的对象C++移动到另一个对象
- 创建一个移动分配函数,不断得到"pointer being freed was not allocated"
- 符合者在EAX上来回产生一个移动
- 我什么时候应该声明一个移动构造函数而不例外
- 从一个移动的摄像机到一个定点opengl
- 我丢失了一个移动/复制赋值
- 什么时候我应该提供一个移动感知过载
- 我能对一个移动的物体做什么呢?
- 用VBO和FBO绘制一个移动的精灵
- 如何跟踪一个移动的物体