[0413] FFTSHIFT的四种写法
FFTSHIFT的四种写法
前言
matlab说,“你读过书,……我便考你一考。fftshift的函数,怎样写的?”我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。matlab等了许久,很恳切的说道,“不能写罢?……我教给你,记着!这些代码将来做程序员的时候,前端要用。”我暗想我和程序员的等级还很远呢,而且前端从来用不到图像处理;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不就是直接调用fftshift么?”matlab显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……fftshift的代码有四样写法,你知道么?”我愈不耐烦了,努着嘴走远。matlab刚用指甲蘸了酒,想在柜上写代码,见我毫不热心,便又叹一口气,显出极惋惜的样子。
四种写法
- 使用
type fftshift.m直接看fftshift函数:

- 什么!!原来是个空架子,直接调用了circshift,不过我还是找来了早年fftshift的源码:
[x, y] = size (V);
xx = ceil (x/2);
yy = ceil (y/2);
retval = V([xx+1:x, 1:xx], [yy+1:y, 1:yy]);
+ 让我们来运行对比一下:

+ ??结果竟然不一样,肯定是Matlab暗改了!
- 让我们来自己写一哈fftshift的代码:
nd = ndims (x);
sz = size (x);
sz2 = ceil (sz ./ 2);
idx = repmat ({':'},1,2);
for i = 1:nd
idx{i} = [sz2(i)+1:sz(i), 1:sz2(i)];
end
retval = x(idx{:});
+ 相信自己,一定能成功!

+ 恶膜某蛤秒没命,一定是我太弱了,代码写错了!
- 让我们来使用调用的circshift试试看!
- 找的代码:
nd=2;
sz=size(I);
n=floor(size(I)/2);
idx = repmat ({':'},1,nd);
for i = 1:nd;
b=n(i);
d=sz(i);
if(b>0)
b=rem(b,d);
idx{i}=[d-b+1:d,1:d-b];
elseif(b<0)
b=rem(abs(b),d);
idx{i}=[b+1:d,1:b];
end
end
+ 运行结果:

+ 是在哈输了!
- 不听不听,我们再写一个代码:
- Code:
sz = ceil(size(A)/2);
A = A([sz(1)+1:end, 1:sz(1)], [sz(2)+1:end, 1:sz(2)]);
+ 打扰了:

- 验证4个函数的正确性
- 我们定义一个3X3填充1-9的矩阵,他fftshift的正确结果是:

- 函数1结果:

- 函数2结果:

- 函数3结果:

- 函数4结果:

- 我们定义一个3X3填充1-9的矩阵,他fftshift的正确结果是:
- 竟然都是对的!究竟是道德的沦丧还是人性的扭曲,欢迎收看《十大未解之谜》之matlab的fftshift函数。
[0413] FFTSHIFT的四种写法的更多相关文章
- swap函数的四种写法
swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...
- Android代码规范----按钮单击事件的四种写法
[前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...
- JS 获取星期几的四种写法
今天是星期几的4种JS代码写法,有需要的朋友可以参考一下 第一种写法 复制代码代码如下: var str = ""; var week = new Date().getDay() ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...
- Android点击事件(click button)的四种写法
在学习android开发和测试的时候发现不同的人对于click事件的写法是不一样的,上网查了一下,发现有四种写法,于是想比较一下四种方法的不同 第一种方法:匿名内部类 代码: package com. ...
- 17_点击事件第四种写法_布局文件添加onclick属性
尽量不要用第四种点击事件的写法.在一万多行代码中发现了一个没被调用的代码 public void call(View v){//第四种写法参数一定是View v //public void call( ...
- Android笔记---点击事件的四种写法
Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...
- Android中点击事件的四种写法详解
Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法 ...
- JAVA_SWT 事件的四种写法
一:匿名内部类写法 在一个组件下加入以下语句 text.addMouseListener(new MouseAdapter(){ public void mouseDoubleClich(MouseE ...
随机推荐
- RNN实例
https://blog.csdn.net/jmh1996/article/details/78821216
- mongoDB3.4的sharding集群搭建及JavaAPI的简易使用
第一部分 在搭建mongoDB之前,我们要考虑几个小问题: 1.我们搭建集群的目的是什么?是多备份提高容错和系统可用性还是横向拓展存储大规模数据还是两者兼有? 如果是为了多备份那么选择replicat ...
- hibernate文档头的不同版本
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h ...
- pat 团体赛练习题集 L2-006. 树的遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数.第二行给出其后序遍历序 ...
- Python实现京东自动登录
配置好webdriver,用的是Chrome的 import cv2 import time import numpy as np from selenium import webdriver fro ...
- Docker学习笔记之docker-save vs docker-export vs docker-commit
之前对这几个command是忘了记,记了混-所以写下笔记以巩固之. 1.docker save docker save -h Usage: docker save [OPTIONS] IMAGE [I ...
- Docker学习笔记之镜像与容器
0x00 概述 镜像和容器作为 Docker 里最基础的概念,我们很有必要了解 Docker 对它们的很多定义以及其他与它们有关的知识.在这一小节里,我们就专门针对镜像与容器两个概念展开,细致的梳理与 ...
- Python 3 实现色情图片识别
Python 3 实现色情图片识别 项目简介 项目内容 本实验将使用 Python3 去识别图片是否为色情图片,我们会使用到 PIL 这个图片处理库,会编写算法来划分图像的皮肤区域. 项目知识点 Py ...
- The Usage of Lambda and Heap in the C++ STL
The Usage of Lambda and Heap in the C++ STL Heap In c++ STL, the heap had been implemented as the pr ...
- openstack components internal relations
1. 各个组件之间可以互相调用(都是common sense) conductor 负责DB的操作. 各个组件之间通过RPC, 序列化通过oslo_versionedobjects. 2. 具体调用 ...