使用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)例如三张图像或者更多张合并,如何修改。
【问】改变像素列单元宽度,每张图像各取1列改为取 2 、3、4 …像素列为一组,再组合,如何修改?
【答】把原来代码中下列两行
X(:,1:2:end,:) = X1;改成
cols = 20;其中cols就是你所说的单元宽度。
【问】三张图像或者更多张合并,如何修改
【答】需要改动的地方比较多。
以三张为例,原来代码中读图像、预处理的部分类似,省略不写了。
主要改动的是下面几行:
X = zeros(h,2*w,3);改为
X = zeros(h,3*w,3);这是单元宽度为一个像素的情况,如果考虑多个像素,写法可参考上一问。
如果处理更多的图像,应该考虑用循环,那样改动就更多。
追问你好,cols 那一段我拿两张,纯黑纯白图片试了下,似乎如果图片像素尺寸不同,计算取整会有一定误差? 按你的程序我cols 取1 的时候 得到的图片 比cols 取 10 的时候频率还低。
谢谢
取10
取1
【如果图片像素尺寸不同,计算取整会有一定误差?】
如果尺寸不同,前面的预处理会将其变成相同尺寸,照理说不会有影响。
至于你看到图中疏密好像不均匀,有可能只是屏幕显示的问题,你试试放大了看。
【cols 取1 的时候 得到的图片 比cols 取 10 的时候频率还低】
我的实际测试没有发现你说的情况。
cols取1:
cols取10:
改动那几句虽然代码量不大,但我是花了不少心思的,考虑了各种可能,做了很充分的测试,应该是比较可靠的。