matlab 有重叠的图像拼接 代码
答案:2 悬赏:10
解决时间 2021-03-06 14:56
- 提问者网友:王者刀枪不入
- 2021-03-06 04:38
有两张图片,中间有部分是重叠的,希望能够拼接两张图片。
最佳答案
- 二级知识专家网友:茫然不知崩溃
- 2021-03-06 05:50
给你提供个思路啊,你可以分别先把两幅图像绘出,figure(1)和figure(2),然后你可以都放大,分别在两个窗口里获取重叠部分对应相同的几个点(p1=get(gca,'CurrentPoint');%在图像坐标系内获取坐标,即矩阵行列号),然后根据这些点你可以对图像矩阵进行拼接操纵。比如图a的最右边和b的最左边重叠,把a的右边删掉,然后从b的相应位置开始接到a的右边。
全部回答
- 1楼网友:情战凌云蔡小葵
- 2021-03-06 06:22
你可以试试下面的程序:
i=imread('myphoto.jpg'); % 假设要处理的图像是myphoto.jpg
heights=size(i,1); % 图像的高
widths=size(i,2); % 图像的宽
m=8; % 假设纵向分成8幅图
n=10; % 假设横向分成10幅图
% 考虑到rows和cols不一定能被m和n整除,所以对行数和列数均分后要取整
rows=round(linspace(0,heights,m+1)); % 各子图像的起始和终止行标
cols=round(linspace(0,widths,n+1)); % 各子图像的起始和终止列标
blocks=cell(m,n); % 用一个单元数组容纳各个子图像
for k1=1:m
for k2=1:n
blocks{k1,k2}=i(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:);
subimage=blocks{k1,k2};
% 以下是对subimage进行边缘检测
% 加入边缘检测的代码
% 以上是对subimage进行边缘检测
blocks{k1,k2}=subimage;
end
end
processed=i; % processed为处理后的图像,用原图像对其初始化
% 以下为拼接图像
for k1=1:m
for k2=1:n
processed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2};
end
end
figure,imshow(processed)
% 以上的程序已测试过,对灰度图像和真彩图像都可以运行。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯