声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 matlab 查看内容

matlab来编码计算全息图

2015-11-3 07:55| 发布者: aspen| 查看: 1250| 评论: 8|原作者: happy|来自: 声振论坛

摘要: 计算全息编码及再现程序。 关键词: 迂回位相编码,傅里叶变换全息,全息再现
计算全息编码及再现程序
关键词: 迂回位相编码,傅里叶变换全息,全息再现

close all;clc;clear
A=zeros(64);
A(15:20,20:40)=1;A(15:50,20:25)=1;
A(45:50,20:40)=1;A(30:34,20:35)=1;
% ppp=exp(rand(64)*pi*2*i);A=A.*ppp;
% Author's email: zjliu2001@163.com
figure;imshow(abs(A),[]);
Fa=fft2(fftshift(A));Fs=fftshift(Fa);
Am=abs(Fs); % amplitude
Ph=angle(Fs); % phase
s=11;
cgh=zeros(64*s);
th=max(max(abs(Fs)));
qq=th/1.2;
Am(Am>qq)=qq;
q=1:s;w=(s+1)/2;
for m=1:64;
for n=1:64;
h=round(Am(m,n)/qq*(w-1)-0.5);
md=zeros(s);
if h>0;
td=ones(h*2+1,3);
Pm=round(Ph(m,n)/pi*3);
kz=Pm+w;
md(w-h:w+h,kz-1:kz+1)=td;
end
cgh((m-1)*s+q,(n-1)*s+q)=md;
end
end
figure;imshow(cgh,[]); % 迂回位相编码结果
Re=ifft2(cgh); Re=fftshift(Re);
figure;imshow(abs(Re),[]); % 再现图像

来自萝卜驿站
发表评论

最新评论

引用 happy 2006-3-25 09:01
计算全息编码及再现程序

关键词: 迂回位相编码,傅里叶变换全息,全息再现
  1. close all;clc;clear
  2. A=zeros(64);
  3. A(15:20,20:40)=1;A(15:50,20:25)=1;
  4. A(45:50,20:40)=1;A(30:34,20:35)=1;
  5. % ppp=exp(rand(64)*pi*2*i);A=A.*ppp;
  6. % Author's email: zjliu2001@163.com
  7. figure;imshow(abs(A),[]);
  8. Fa=fft2(fftshift(A));Fs=fftshift(Fa);
  9. Am=abs(Fs); % amplitude
  10. Ph=angle(Fs); % phase
  11. s=11;
  12. cgh=zeros(64*s);
  13. th=max(max(abs(Fs)));
  14. qq=th/1.2;
  15. Am(Am>qq)=qq;
  16. q=1:s;w=(s+1)/2;
  17. for m=1:64;
  18. for n=1:64;
  19. h=round(Am(m,n)/qq*(w-1)-0.5);
  20. md=zeros(s);
  21. if h>0;
  22. td=ones(h*2+1,3);
  23. Pm=round(Ph(m,n)/pi*3);
  24. kz=Pm+w;
  25. md(w-h:w+h,kz-1:kz+1)=td;
  26. end
  27. cgh((m-1)*s+q,(n-1)*s+q)=md;
  28. end
  29. end
  30. figure;imshow(cgh,[]); % 迂回位相编码结果
  31. Re=ifft2(cgh); Re=fftshift(Re);
  32. figure;imshow(abs(Re),[]); % 再现图像
复制代码

来自萝卜驿站
引用 qdmagi 2006-3-26 09:26
谢谢教授!真的,非常感谢!
引用 qdmagi 2006-3-26 17:51
把某幅图像利用imread函数读入后,想对该幅图像进行抽样?该怎么办呢?
引用 happy 2006-3-26 18:18
把某幅图像利用imread函数读入后,想对该幅图像进行抽样?该怎么办呢?

那就要看你要按照什么抽样了
引用 qdmagi 2006-3-26 18:25
谢谢教授的帮助。
其实,听起来挺简单的,就是一幅图像在matlab中是个矩阵,然后怎样改变这个矩阵的大小呢。
我是matlab的初学者,请教授多多帮助。
还有上面的程序中,
Am=abs(Fs); % amplitude
Ph=angle(Fs); % phase
s=11;
cgh=zeros(64*s);
th=max(max(abs(Fs)));
qq=th/1.2;
Am(Am>qq)=qq;
q=1:s;w=(s+1)/2;
for m=1:64;
for n=1:64;
h=round(Am(m,n)/qq*(w-1)-0.5);
md=zeros(s);
if h>0;
我感觉,h一定是大于0的。
很是不解?
引用 happy 2006-3-26 18:39
如果是缩放的可以用命令imresize

如果是裁剪的话,可以用imcrop

如果是求图像中的部分点的话可以按照下面的例子

比如图像A是210*160*3

我要隔点取其中的点

[m,n,k]=size(A);
B=A(1:2:m,1:2:n,:)
引用 happy 2006-3-26 18:40
第二个问题我没仔细研究过,这个程序不是我写的
引用 qdmagi 2006-3-26 18:40
好的
我知道了
谢谢教授!

查看全部评论(8)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-10 13:33 , Processed in 0.060662 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部