将图像复制到更大的图像

时间:2016-11-11 05:44:31

标签: matlab image-processing

我想将子图像复制到更大的图像。假设我有image1和image2,其中image2的大小为600x300,而image1的大小为200x100。我想将image1复制到image2,而image2的其余部分仍然存在。我尝试过这样的事情 -

`back_img = zeros(round(boundary_y),round(boundary_x),3);
back_img = back_img(:,:,:);

[src_y, src_x,~] = size(img1);
back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);
figure; imshow(back_img);`

我有一个黑色背景,我想粘贴我的图像。我得到一个白色的盒子,我的图像必须在那里作为我的结果。我错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

主要问题:controller.app属于班级back_imgdouble属于班级img1
显示类uint8的图像会将double以上的所有像素显示为白色像素 在1类中,像素范围是[0,255],当255是白色时。

关注代码:uint8,将back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);矩阵放在类(类型)uint8的矩阵中。
在这种情况下,Matlab规则将double元素转换为uint8doubleimshow(back_img)时使用back_img,应用像素范围[0,1](0为黑色,1为白色)。 高于1的像素也是白色的 原始double图像的几乎所有像素都是1或更高,因此在转换为double之后显示为白色像素。

解决方案:在与uint8相同的类中创建零矩阵(在您的情况下为类img1)。

检查以下代码示例:

uint8

结果:
enter image description here

原始代码的结果:
enter image description here

答案 1 :(得分:0)

上面代码的问题是背景图像中的零是双倍的,将它们转换为整数(uint8)将修复它。

答案 2 :(得分:-1)

这里有许多令人困惑的事情,但我认为核心问题是

back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);

改为

back_img(1:src_y, 1:src_x,1:3) = img1;

实现黑色填充的更简单方法是:

padarray(A,padsize,padval,direction)