【问题标题】:How to generate a specific synthetic image如何生成特定的合成图像
【发布时间】:2016-07-27 09:35:57
【问题描述】:

我想生成一个黑色的 64x64 像素图像,中间有一个 5x10 像素的白色矩形,然后使用 2D 傅里叶变换来绘制原始图像、模块、相位和恢复图像。

这是我的代码:

image_1_black = double(zeros(64, 64, 3, 'uint8'));
image_1_white = double(ones(5, 10, 3, 'uint8'));

% I need to do something like this:
% image1 = image_1_black with image_1_white

IMAGE_1 = fft2(image_1);
IMAGE_1 = fftshift(IMAGE_1);

IMAGE_1_REC = fftshift(IMAGE_1);
image_1_rec = ifft2(IMAGE_1_REC);

figure;
subplot(2, 2, 1);
imagesc(image_1);
colormap(gray); 
axis off;
title('Original image');

subplot(2, 2, 2);
imagesc(100*log(1 + abs(IMAGE_1)));
colormap(gray);
axis off;
title('Magnitude spectrum');

subplot(2, 2, 3);
imagesc(angle(IMAGE_1));
colormap(gray);
axis off;
title('Phase spectrum');

subplot(2, 2, 4);
imagesc(image_1_rec);
colormap(gray);
axis off;
title('Imagen recuperada');

我知道如何单独生成两个图像,但不知道如何将它们组合起来以获得所需的图像以及我的代码正常工作。

谢谢大家!

【问题讨论】:

  • 您想在第一张图片上显示白色图片吗?还是第二个?
  • 我需要第一张图片中间的白色图片
  • 那你为什么要创建第二张白色图像?
  • 只做:image_1_black = double(zeros(64, 64, 3, 'uint8')); image_1_black(29:34,24:39,:) = 1;这应该这样做
  • @user2205242 只需执行image_1_black = zeros(64,64,3);。指定 uint8 作为类型然后强制转换为 double 是多余的。它默认创建一个double 精度矩阵。

标签: image matlab matrix colors fft


【解决方案1】:
image_1_black = double(zeros(64, 64, 3, 'uint8'));
image_1_black(29:34,24:39,:)=255;

【讨论】:

  • 我建议您在 OP 所做的 imagesc 调用中删除 100 的缩放比例。您会更好地看到光谱,并且不会使显示饱和。 imagesc 为您自动缩放...另外,请确保您让 OP 知道您在修改为 image_1_black 后设置了 image_1 = image_1_black;
  • 好的@rayryeng,谢谢。 user2205242 我得到下一个像你一样的错误: Error using image TrueColor CData contains element out of range 0.0
  • @Kroka 我认为您可能对许可证有疑问。我运行了您的代码,一切正常,就像您在图片中看到的那样。
  • @Kroka 一旦你设置了image_1 = image_1_black; 并且在你把白色方块放进去之后,这段代码运行良好。
  • @rayryeng 我在执行 image_1 = image_1_black 时遇到同样的错误
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多