文章目录[隐藏]
part1 全景图切割
原图:
切割效果:
1.1 边缘剔除
有些全景图会自带白灰色边
本文来源gaodai.ma#com搞##代!^码@网3
缘,若是直接进行切割便会出现如下效果:
这时候我们首先要对原图进行白边剔除,代码如下:
oriPic=imread('test.hdr'); [rows,cols,~]=size(oriPic); for i=cols:-1:1 tempListR=oriPic(floor(rows/4):ceil(3*rows/4),i,1); tempListG=oriPic(floor(rows/4):ceil(3*rows/4),i,1); tempListB=oriPic(floor(rows/4):ceil(3*rows/4),i,1); if all(round(tempListR-mean(tempListR))==0)&&all(tempListR==tempListG)&&all(tempListR==tempListB) oriPic(:,i,:)=[]; else break; end end oriPic=oriPic(:,end:-1:1,:); for i=size(oriPic,2):-1:1 tempListR=oriPic(floor(rows/4):ceil(3*rows/4),i,1); tempListG=oriPic(floor(rows/4):ceil(3*rows/4),i,1); tempListB=oriPic(floor(rows/4):ceil(3*rows/4),i,1); if all(round(tempListR-mean(tempListR))==0)&&all(tempListR==tempListG)&&all(tempListR==tempListB) oriPic(:,i,:)=[]; else break; end end oriPic=oriPic(:,end:-1:1,:); for i=rows:-1:1 tempListR=oriPic(i,floor(cols/4):ceil(3*cols/4),1); tempListG=oriPic(i,floor(cols/4):ceil(3*cols/4),1); tempListB=oriPic(i,floor(cols/4):ceil(3*cols/4),1); if all(round(tempListR-mean(tempListR))==0)&&all(tempListR==tempListG)&&all(tempListR==tempListB) oriPic(i,:,:)=[]; else break; end end oriPic=oriPic(end:-1:1,:,:); for i=size(oriPic,1):-1:1 tempListR=oriPic(i,floor(cols/4):ceil(3*cols/4),1); tempListG=oriPic(i,floor(cols/4):ceil(3*cols/4),1); tempListB=oriPic(i,floor(cols/4):ceil(3*cols/4),1); if all(round(tempListR-mean(tempListR))==0)&&all(tempListR==tempListG)&&all(tempListR==tempListB) oriPic(i,:,:)=[]; else break; end end oriPic=oriPic(end:-1:1,:,:);
1.2 图像裁剪
我们要让完成的就是如下的变换和裁剪:
另:
在参考代码的基础上,对映射像素进行了插值处理,可以使图像更加平滑,原理如下: