菲涅尔计算全息图

[复制链接]
匿名  发表于 2023-4-11 22:06:54
可以整理一下代码吗?用缩放后宽度高度均为500的图片
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2023-4-11 22:07:54 | 显示全部楼层
qianchezi 发表于 2023-04-11 22:06
可以整理一下代码吗?用缩放后宽度高度均为500的图片 ...

好的,以下是整理好的Matlab代码,可以将两张图片缩放后按一定间隔合成一个三维图像:
  1. % 读取两张二维图片
  2. img1 = imread('image1.png');
  3. img2 = imread('image2.png');
  4. % 对两张图片进行缩放
  5. img1_resized = imresize(img1, [500, 500]);
  6. img2_resized = imresize(img2, [500, 500]);
  7. % 创建一个500x500x2的三维矩阵,并将两张图片拼接在一起
  8. img3D = cat(3, img1_resized, img2_resized);
  9. % 定义z轴的步长为0.5cm
  10. step_size = 0.5;
  11. % 计算z轴方向上的位移矩阵
  12. num_slices = size(img3D, 3);
  13. z_shifts = ((1:num_slices) - 1) * step_size;
  14. z_shifts = reshape(z_shifts, 1, 1, []);
  15. % 将图像沿着z轴平移
  16. img3D_shifted = imtranslate(img3D, [0, 0, z_shifts]);
  17. % 显示合成后的三维图像
  18. figure;imshow3D(img3D_shifted);
复制代码

注意: 这里使用的imshow3D函数不是Matlab自带的函数,需要事先安装Matlab工具箱或手动编写该函数的代码。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2023-4-11 22:13:17
img3D = cat(3, img1_resized, img2_resized);这里维度不一致哇
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2023-4-11 22:16:32 | 显示全部楼层
qianchezi 发表于 2023-04-11 22:13
img3D = cat(3, img1_resized, img2_resized);这里维 ...

抱歉,我的错误。应该先将两张图片都改变为宽度、高度均为500,再进行拼接。下面是修改过的Matlab代码:
  1. % 读取两张二维图片
  2. img1 = imread('image1.png');
  3. img2 = imread('image2.png');
  4. % 对两张图片进行缩放
  5. img1_resized = imresize(img1, [500 500]);
  6. img2_resized = imresize(img2, [500 500]);
  7. % 将两张图片拼接成一个三维矩阵
  8. img3D = cat(3, img1_resized, zeros(500,500,round(size(img1_resized,1)*0.5)), img2_resized);
  9. % 显示合成的三维图像
  10. imshow3D(img3D);
复制代码

其中 `zeros(500,500,round(size(img1_resized,1)*0.5))` 表示在两张图片之间插入一定数量的全零矩阵,使得两张图片在Z轴方向上保持距离,这里假设两张图片之间的距离为原始高度的一半,可以根据需要调整。函数 `imshow3D` 用于显示三维图像。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

12
发帖

快速回帖

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则

关于楼主

匿名用户组
  • 主题

    148
  • 回答

    17
  • 积分

    150
联系客服 关注微信 访问手机版 返回顶部 返回列表