数字图像处理(四) 彩色图像拼接

标签: 图像处理matlab彩色图像
3244人阅读 评论(2) 收藏 举报
分类:

   圣诞礼物大作战前奏:拼图

ps的话简单,所以才有人开发了ps。现在使用matlab拼图,我喜欢的人喜欢下列的图,所以直接拿来拼。


bg.jpg

small.jpg


现在,把猪嵌到图片中去。


彩色图像有RGB层,红,绿,蓝。所以到时嵌入需要两张图片的每一层对应后再叠加。


先裁剪麦兜图片。利用

a = imread('small.jpg');
g = roipoly(f);
imwrite(g,'mdb.jpg');
roipoly,多边形裁剪图片。裁剪完后mdb.jpg

这是二值图像,只有0和1,保存之后为uint8,8位无符号整数类型。


接下来拿到麦兜rgb层的裁剪图片,就是将原图的rgb层与mdb.jpg这个矩阵进行点乘运算后,因为黑色的地方为0,所以相乘后将会去除边界。

同时补全图片,因为要和bg.jpg这个大图片叠加。


    %补全图片剩余的其他空间  拿的是R层
    b = a(:,:,1);
    d = b.*uint8(g);
    f = [zeros(50,160);g];
    f = [f;zeros(430,160)];
    f = [f,zeros(600,320)];
    f = [zeros(600,320),f];



与大图片叠加之前,我们要将bg.jpg中准备嵌入的那块置零。不然原本的背景数据叠加上麦兜图片便会失真。


 s = imread('bg.jpg');
 s = s.*uint8(~logical(f));

因为保存之后为uint8,要将其转成logical类型,0和1,麦兜的图像为1,取反为零,s为uint8,再转成uint8类型,点乘后乘零的那部分就没有了。


接下来将两个rgb层的图像叠加。


全代码:


function y = md()
%读入插入图像和roipoly的图像
a = imread('small.jpg');
c = imread('mdb.jpg');
%roipoly提取的二值图像  保存之后又变成uint8类型 但是为了提取所需要的图像 需要进行二值图像的转换
c = logical(c);

%背景图片的读入
r = imread('bg.jpg');
for i= 1:3
    %rgb图层的提取
    b = a(:,:,i);
    d = b.*uint8(c);
    %补全图片剩余的其他空间
    f = [zeros(50,160);d];
    f = [f;zeros(430,160)];
    f = [f,zeros(600,320)];
    f = [zeros(600,320),f];
    
    
    s = r(:,:,i);
    s = s.*uint8(~logical(f));
    
    %将rgb三层分别叠加,得到彩色图像
    image(:,:,i) = s+f;
    pig(:,:,i) = f;
    figure;
    imshow(s+f);
    
end
 imshow(image);
 figure();
 imshow(pig);
 
 %合成图像的输出
 %imwrite(image,'final.jpg');
y =1;



还有其余两层,不贴了,最终大功告成。



阿狸看着天空,想:“麦兜,你怎么不用穿内裤的?”。

麦兜:“因为我不知道理想和真谛”。

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1114810次
    • 积分:9304
    • 等级:
    • 排名:第2084名
    • 原创:132篇
    • 转载:7篇
    • 译文:9篇
    • 评论:510条
    博客专栏
    My GitHub