【Matlab编程】将两幅图片分裂成像素列,再合并输出
使用MATLAB输入两幅图片,将两幅图片拆分成像素列尺度,间隔合并起来。就是说,第一幅图大小为800*600,将它拆成1*600,的800个像素条。第二幅图,大小为800...
使用MATLAB
输入两幅图片,将两幅图片拆分成像素列尺度,间隔合并起来。
就是说,第一幅图大小为800*600,将它拆成1*600,的800个像素条。
第二幅图,大小为800*600,同样拆开
最后,合成图像3,它的第1列像素来自图像1的1列,第2列来自图像2的1列,第3列来自图像1的2列,直到1600列合成完,并输出。
------
% 读取图像
X1 = imread('5.jpg');
X2 = imread('3.jpg');
% 转换为double类型统一处理
X1 = im2double(X1);
X2 = im2double(X2);
% 预处理:高度不足的地方用白色填充
h1 = size(X1,1);
h2 = size(X2,1);
h = max(h1,h2);
if h1<h2
X1(h1+1:h,:,:) = 1;
else
X2(h2+1:h,:,:) = 1;
end
% 预处理:按照较小的宽度进行裁剪
w1 = size(X1,2);
w2 = size(X2,2);
w = min(w1,w2);
if w1>w2
X1(:,w+1:end,:) = [];
else
X2(:,w+1:end,:) = [];
end
% 按列交叉合并
X = zeros(h,2*w,3);
X(:,1:2:end,:) = X1;
X(:,2:2:end,:) = X2;
subplot 131
imshow(X1)
subplot 132
imshow(X2)
subplot 133
imshow(X)
-----------------------------------------
如果我要改成:
1)改变像素列单元宽度,每张图像各取1列改为取 2 、3、4 …像素列为一组,再组合,如何修改?
2)例如三张图像或者更多张合并,如何修改。 展开
输入两幅图片,将两幅图片拆分成像素列尺度,间隔合并起来。
就是说,第一幅图大小为800*600,将它拆成1*600,的800个像素条。
第二幅图,大小为800*600,同样拆开
最后,合成图像3,它的第1列像素来自图像1的1列,第2列来自图像2的1列,第3列来自图像1的2列,直到1600列合成完,并输出。
------
% 读取图像
X1 = imread('5.jpg');
X2 = imread('3.jpg');
% 转换为double类型统一处理
X1 = im2double(X1);
X2 = im2double(X2);
% 预处理:高度不足的地方用白色填充
h1 = size(X1,1);
h2 = size(X2,1);
h = max(h1,h2);
if h1<h2
X1(h1+1:h,:,:) = 1;
else
X2(h2+1:h,:,:) = 1;
end
% 预处理:按照较小的宽度进行裁剪
w1 = size(X1,2);
w2 = size(X2,2);
w = min(w1,w2);
if w1>w2
X1(:,w+1:end,:) = [];
else
X2(:,w+1:end,:) = [];
end
% 按列交叉合并
X = zeros(h,2*w,3);
X(:,1:2:end,:) = X1;
X(:,2:2:end,:) = X2;
subplot 131
imshow(X1)
subplot 132
imshow(X2)
subplot 133
imshow(X)
-----------------------------------------
如果我要改成:
1)改变像素列单元宽度,每张图像各取1列改为取 2 、3、4 …像素列为一组,再组合,如何修改?
2)例如三张图像或者更多张合并,如何修改。 展开
2个回答
展开全部
【问】改变像素列单元宽度,每张图像各取1列改为取 2 、3、4 …像素列为一组,再组合,如何修改?
【答】把原来代码中下列两行
X(:,1:2:end,:) = X1;
X(:,2:2:end,:) = X2;
改成
cols = 20;
intC = fix(w/cols)*2*cols;
inx1 = [sort(cell2mat(arrayfun(@(i){i:2*cols:intC},1:cols))) intC+1:w+intC/2];
inx2 = [sort(cell2mat(arrayfun(@(i){i:2*cols:intC},cols+1:cols*2))) w+intC/2+1:2*w];
X(:,inx1,:) = X1;
X(:,inx2,:) = X2;
其中cols就是你所说的单元宽度。
【问】三张图像或者更多张合并,如何修改
【答】需要改动的地方比较多。
以三张为例,原来代码中读图像、预处理的部分类似,省略不写了。
主要改动的是下面几行:
X = zeros(h,2*w,3);
X(:,1:2:end,:) = X1;
X(:,2:2:end,:) = X2;
改为
X = zeros(h,3*w,3);
X(:,1:3:end,:) = X1;
X(:,2:3:end,:) = X2;
X(:,3:3:end,:) = X3;
这是单元宽度为一个像素的情况,如果考虑多个像素,写法可参考上一问。
如果处理更多的图像,应该考虑用循环,那样改动就更多。
追问
展开全部
第一个问题
columlength=2;%也可以改成3,4,看你要求了。
for i=1:2*w
if(i%(2*columlength)<columlength+1)
a1=floor(i/(2*columlength));
for j=1:columlength
X(:,i,:)=X1(:,a1*columlength+i%columlength,:);
end
else
a1=floor(i/(2*columlength));
for j=1:columlength
X(:,i,:)=X2(:,a1*columlength+i%columlength,:);
end
end
subplot 131
imshow(X1);
subplot 132
imshow(X2);
subplot 133
imshow(X);
最后一部分的,就是按交叉那的。没有在MALTAB上跑,自己写的,你粘进去试试吧。
至于第二个问题,我觉得你如果看的懂程序的话,从两张往三张或更多上扩展很容易的。
columlength=2;%也可以改成3,4,看你要求了。
for i=1:2*w
if(i%(2*columlength)<columlength+1)
a1=floor(i/(2*columlength));
for j=1:columlength
X(:,i,:)=X1(:,a1*columlength+i%columlength,:);
end
else
a1=floor(i/(2*columlength));
for j=1:columlength
X(:,i,:)=X2(:,a1*columlength+i%columlength,:);
end
end
subplot 131
imshow(X1);
subplot 132
imshow(X2);
subplot 133
imshow(X);
最后一部分的,就是按交叉那的。没有在MALTAB上跑,自己写的,你粘进去试试吧。
至于第二个问题,我觉得你如果看的懂程序的话,从两张往三张或更多上扩展很容易的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询