【通过迭代相位检索重建衍射图案和全息图中缺失信息】不完整衍射图案的迭代重建和缺失像素的恢复(Matlab代码实现)

news2024/10/7 8:20:18

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文章讲解


💥1 概述

文献来源:

结果表明,即使缺少某些测量的强度样本,也可以从其衍射图或全息图中成功检索物体分布。允许的最大缺失值数取决于线性过采样比率 s,其中 s 的值越高,丢失的样本强度就越多。对于实值物体,缺失像素与像素总数的比率不应分别超过采集的衍射图案或全息图中的(1 - 2/s^2)或(1 - 1/s^2)。例如,在 s = 5 的过采样比率下,即使是测量强度值的 8% 也足以同时检索对象分布和缺失强度值。重要的是,缺失的强度值不应集中在中心,而应随机分布在获得的衍射图案上。

原文摘要:

It is demonstrated that an object distribution can be successfully retrieved from its diffraction pattern or hologram, even if some of the measured intensity samples are missing. The maximum allowable number of missing values depends on the linear oversampling ratio s, where the higher the value of s, the more intensity samples can be missing. For a real-valued object, the ratio of missing pixels to the total number of pixels should not exceed (1 - 2/s^2) or (1 - 1/s^2) in the acquired diffraction pattern or hologram, respectively. For example, even 5% of the measured intensity values at an oversampling ratio of s = 8 are sufficient to simultaneously retrieve the object distribution and the missing intensity values. It is important that the missing intensity values should not be concentrated in the centre, but should be randomly distributed over the acquired diffraction pattern.

Coherent diffraction imaging Holography Iterative phase retrieval Nyquist–Shannon theorem Sampling rate

📚2 运行结果

 

 

部分代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
beta = 0.9;              % parameter in HIO algorithm
treshold = 1;            % treshold in the object domain
Iterations = 2000;       % number of iterative loops, typically 200 iterations are enough
N = 512;                 % number of pixels
p = 0.01;                % time to pause, otherwise images are not shown
Reconstructions = 100;   % number of reconstructions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Reading diffraction pattern
    fid = fopen('a_dp.bin', 'r');
    dp = fread(fid, [N, N], 'real*4');
    fclose(fid);      
    dp_amplitude(:,:) = sqrt(dp(:,:));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Finding pixels with values zero
mask = ones(N,N);
for ii=1:N
    for jj=1:N
       if ((dp_amplitude(ii,jj) == 0))
       mask(ii,jj) = 0;
       end
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Creating support in object domain
support = zeros(N,N);
R = N/8;
for m = 1:N
    for n = 1:N
        x = N/2 - m;
        y = N/2 - n;
        if ((abs(x) <= R) && (abs(y) <= R))
            support(m,n) = 1;
    end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for kk = 1:Reconstructions  
fprintf('Reconstruction: %d\n', kk)   
ButtonHandle = uicontrol('Style', 'PushButton', ...
                         'String', 'Stop loop', ...
                         'Callback', 'delete(gcbf)');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Creating initial complex-valued field distribution at the detector plane
phase = zeros(N,N);
phase = (2*rand(N,N) - 1)*pi;
field_detector_0 = dp_amplitude(:,:).*exp(i*phase(:,:));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Getting initial object distribution
object_0 = IFT2Dc(field_detector_0);
gk = real(object_0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Iterative loop
for ii = 1:Iterations

% fprintf('Iteration: %d\n', ii)   
field_detector = FT2Dc(gk);

% Replacing updated amplitude with the measured amplitude
field_detector_updated_abs = dp_amplitude.*mask + abs(field_detector).*(1-mask);
field_detector_updated = field_detector_updated_abs.*exp(i*angle(field_detector));

% Getting updated object distribution
gk_prime = real(IFT2Dc(field_detector_updated));
error = error_function_Miao(gk_prime,support);

% Showing reconstructed object distribution
      imshow(flipud(imresize(rot90(gk_prime), 0.5)), []);
      title('Reconstructed object distribution')
      xlabel({'x / px'})
      ylabel({'y / px'})
      axis on
      set(gca,'YDir','normal')
      colormap('gray')
      colorbar;
pause(p);

% Applying constraints to the object distribution
for m = 1:N
    for n = 1:N
        if ((gk_prime(m,n) > 0) && (support(m,n) > 0.5))
            gk1(m,n) = gk_prime(m,n);
        else
            gk1(m,n) = gk(m,n) - beta*gk_prime(m,n);
    end
end
end

% % Treshold constraint, transmission<1 or absorption>0
% for m = 1:N
%     for n = 1:N
%     if ((gk1(m,n) > treshold))
%             gk1(m,n) = treshold;
%     end
%     end
% end

gk = gk1;

if ~ishandle(ButtonHandle)
break;
    end

end
phase = angle(field_detector_updated);
field_detector = sqrt(dp).*exp(i*phase);
object = real(IFT2Dc(field_detector));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Saving results

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] Latychevskaia T .Reconstruction of missing information in diffraction patterns and holograms by iterative phase retrieval[J].Optics Communications, 2019, 452:56-67.DOI:10.1016/j.optcom.2019.07.021.

🌈4 Matlab代码及文章讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【编译之美】【1. JS闭包问题】

什么是闭包 在 JavaScript 和 Python 等语言里&#xff0c;函数可以像数值一样使用&#xff0c;比如给变量赋值、作为参数传递给其他函数&#xff0c;作为函数返回值等等。比如下面这一段代码&#xff1a; var a 0;var fun1 function(){var b 0; // 函数内…

UE4/5c++基于BlueprintAsyncActionBase和FTickableGameObject的异步节点【多流程的创建、异步执行】

目录 简单的多流程制作 取消除流程外&#xff0c;原本的蓝图执行线【如果要进行异步执行可以不取消看效果】 结果 代码&#xff1a; 继承FTickableGameObject&#xff0c;时刻判断是否结束&#xff0c;来执行不同引脚 结果&#xff1a; 代码&#xff1a; 在之前笔者讲解…

数据结构(王道)——顺序表的基本操作(插入、删除)

顺序表之实现插入&#xff1a; 插入的基础实现&#xff1a; 更加有健壮性的插入 插入实现的时间复杂度分析&#xff1a; 顺序表之实现删除&#xff1a; 删除的实现 删除实现的时间复杂度分析&#xff1a; 总结&#xff1a;

Ubuntu18.04 系统安装 Docker

1、首先更新软件源&#xff1a; sudo apt-get updatesudo apt-get upgrade 2、安装Docker&#xff1a; sudo apt install docker -y 3、查看安装的Docker apt list docker 4、查看docker 进程 ps -ef|grep docker 5、查看docker 版本有问题 6、开启Docker服务 systemctl…

​LeetCode解法汇总931. 下降路径最小和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matr…

企业视角下的个人信息保护影响评估具体实施

个人信息保护影响评估&#xff08;PIA&#xff09;是指企业对个人信息的收集、存储、使用、加工、传输、提供、公开、删除等贯穿数据全生命周期活动的检验&#xff0c;判断活动合规程度、保护措施的有效程度以及对个人信息主体合法权益造成损害的风险。个人信息保护影响评估旨在…

力扣 55. 跳跃游戏

题目来源&#xff1a;https://leetcode.cn/problems/jump-game/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;不断更新可覆盖范围&#xff0c;能达到最后一个元素即返回true&#xff0c;否则返回false。 class Solution { public:bool canJump(vecto…

【Github】推荐一个简介好用的导航站项目

导航在我们的生活中具有重要意义——它为我们提供方向和指引&#xff0c;赋予我们力量和信心&#xff0c;开阔我们的胸膛。在数字时代&#xff0c;我们也需要一种轻量级的导航方式&#xff0c;能够整合各种服务&#xff0c;提供便捷的访问途径。 正是基于这样的需求&#xff0…

6月客户文章盘点——累计IF 136.4,平均IF 8.525

客户文章一览 凌恩生物以打造国内一流生物公司为目标&#xff0c;在科研测序领域深耕不辍&#xff0c;吸纳多名在生物信息高级技术人员的加盟&#xff0c;参与并完成多个高科技项目。现已在宏组学、基因组、表观遗传以及蛋白代谢等多组学及联合分析领域积累了深厚经验&#xff…

基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案

引言 Sparkplug 是基于 MQTT 的一种专门为工业自动化和物联网应用而设计的通信协议。要搭建 Sparkplug 解决方案&#xff0c;需要两个核心组件&#xff1a;一个是 MQTT Broker&#xff0c;负责消息的分发和管理&#xff1b;另一个是边缘节点&#xff0c;负责将本地设备接入 Br…

Linux下软件安装的命令

源码安装 以源代码安装软件&#xff0c;每次都需要配置操作系统、配置编译参数、实际编译&#xff0c;最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM安装软件的默认路径: 注意&#xff1a; /etc 配置文件放置目录/usr/bin 一些可执行文件/usr/lib 一些程…

删除文件后,没有回收站也能恢复,教你如何操作

在现代数字化生活中&#xff0c;电脑已成为我们不可或缺的工具。我们存储在电脑中的文件&#xff0c;包括文档、图片、视频、音乐等&#xff0c;都承载着我们的重要信息和记忆。然而&#xff0c;有时我们会意外地删除这些文件&#xff0c;而对于大多数人来说&#xff0c;第一个…

编程小白的自学笔记九(python爬虫入门+代码详解)

系列文章目录 编程小白的自学笔记八&#xff08;python中的多线程&#xff09; 编程小白的自学笔记七&#xff08;python中类的继承&#xff09; 编程小白的自学笔记六&#xff08;python中类的静态方法和动态方法&#xff09; 编程小白的自学笔记五&#xff08;Python类的…

【Unity面试篇】Unity 面试题总结甄选 |网络相关 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…

git命令将一个项目推送到多个远程仓库

一、查看远程仓库(已经有一个仓库的地址)输入下面命令进行查看 git remote -v二、把项目添加到另外一个远程仓库的地址(git remote add 仓库名称 仓库地址) git remote add gitee http://git.XXXX.com/XXX/XXX.git/三、此时已经把项目添加到另外一个远程仓库了可以通过命令gi…

Java+Vue+Uniapp全端WMS仓库管理系统

详情图片为运行截图,功能列表: 1、数据管理:物料数据管理、物料Bom管理、物料组管理、物料分类管理、供应商管理、仓库管理、货位管理、车间管理 2、采购管理:物料标签管理、入库单管理、入库退货管理 3、质检管理:质检单管理(包括单据号、单据类型、创建时间、检验状态…

华为OD机试真题 JavaScript 实现【人民币转换】【牛客练习题】

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码 专栏导读 本专栏收录于《华为OD机试&#xff08;JavaScript&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题…

【算法基础】进制转换

一、X进制转十进制 (一)Question 1. 问题描述 2. Input 第一行一个整数 x; 第二行一个字符串 S。 3. Output 输出仅包含一个整数,表示答案。 4. Sample Input 16 7B5. Sample Output 123(二)题解 #include <bits/stdc++.h> using

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化&#xff1a;地图符号与注…

宝塔Linux面板安装Composer依赖管理工具与PHP依赖包的方法

最近看见腾讯云有一个AI绘画还挺有意思&#xff0c;想搞来写个接口玩 但是Composer一直运行不成功 提示xdebug什么的 最后经过搜索 发现 需要删除你宝塔里所有php中禁用的putenv函数 然后重启php就可以了&#xff01; 然后就可以运行这个命令了 出现这种情况 还需要删除所有…