logo资料库

全景图像的一种展开方法.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
题目:用 Matlab 将提供给的全方位照片展开为普通图像。 机械 0804 何延浩 u200810546 解: 题目提供的全方位图像为 image360.bmp,如图 1 所示,需要将其展开为普通横版图像。 图 1 一、解题思路 1.利用图像中心处的黑色圆,找出展开原点的精确坐标;2.依据该原点,把周围点的坐 标全部变换为极坐标并储存在新矩阵中;3.显示新矩阵中的图形,即为所求图形。 二、Matlab 编程: 1、IM_read.m --- 读取原图像信息 %Read Image Data clear I = imread('image360.bmp'); %读取原始图像数据 [iheight,iwidth,icolors] = size(I); %获取图像的宽度和高度 %End of File 2、findCEN.m --- 确定展开原点 %Find Centroid Ibw = im2bw(I,0.5); %对图像进行二值化处理(门限值0.5) nExSh = 4; IM_ExSh; %对二值图进行 4 次“扩张-收缩”和“收缩-扩张” IL = bwlabel(~Ibw,8); %标记出二值图中的 8 连通域 cSect_ID = IL(round(iheight/2),round(iwidth/2)); %获取原图片中心点所在连通域的序号 cSect_stats = regionprops(IL); %获取各连通域的属性集合 icenterY = round(cSect_stats(cSect_ID).Centroid(1));%把中心所在连通域的重心作为展开原点 icenterX = round(cSect_stats(cSect_ID).Centroid(2)); %End of File 3、IM_ExSh.m --- 用扩张和收缩的方法对二值图像进行补漏洞、去毛刺 %Smooth the Binary Image IbwES = Ibw; %开辟一块新的存储空间
for nEx = 1:1:nExSh %4 次扩张 for ESx = 2:1:(iheight-1) for ESy = 2:1:(iwidth-1) if ~Ibw(ESx-1,ESy)|~Ibw(ESx+1,ESy)|~Ibw(ESx,ESy-1)|~Ibw(ESx,ESy+1) IbwES(ESx,ESy) = 0; end end end Ibw = IbwES; %更新二值图 end for nSh = 1:1:(nExSh*2) %8 次收缩 for ESx = 2:1:(iheight-1) for ESy = 2:1:(iwidth-1) if Ibw(ESx-1,ESy)|Ibw(ESx+1,ESy)|Ibw(ESx,ESy-1)|Ibw(ESx,ESy+1) IbwES(ESx,ESy) = 1; end end end Ibw = IbwES; %更新二值图 end for nEx = 1:1:nExSh %4 次扩张 for ESx = 2:1:(iheight-1) for ESy = 2:1:(iwidth-1) if ~Ibw(ESx-1,ESy)|~Ibw(ESx+1,ESy)|~Ibw(ESx,ESy-1)|~Ibw(ESx,ESy+1) IbwES(ESx,ESy) = 0; end end end Ibw = IbwES; %更新二值图 end %End of File 4、IM_Plr.m --- 以图形中心为坐标原点,将图片中各点坐标转化为极坐标 %into Polar Coordination Rmax = min(min(icenterX,icenterY),min((iheight-icenterX),(iwidth-icenterY))); %计算展开原点与原图片各边缘的距离,取最小值为展开半径 Cout = 360 %将一个圆周均分为 360 份 for rr = 1:1:Rmax %遍历圆周范围内各点,计算极坐标 for angl = 1:1:Cout Ixx = icenterX+(rr-1)*sind(360*angl/Cout); Iyy = icenterY+(rr-1)*cosd(360*angl/Cout); IPlr((Rmax-rr+1),(Cout-angl+1),1:3) = round(... %用线性加权内插法对各点颜色插值
图 2 (fix(Ixx)+1-Ixx) * (fix(Iyy)+1-Iyy) * I(fix(Ixx),fix(Iyy),1:3) + ... (fix(Ixx)+1-Ixx) * (Iyy-fix(Iyy)) * I(fix(Ixx),fix(Iyy)+1,1:3) + ... (Ixx-fix(Ixx)) * (fix(Iyy)+1-Iyy) * I(fix(Ixx)+1,fix(Iyy),1:3) + ... (Ixx-fix(Ixx)) * (Iyy-fix(Iyy)) * I(fix(Ixx)+1,fix(Iyy)+1,1:3)); end end %End of File 5、IM_run.m --- 执行 %Run and View IM_read findCEN IM_Plr imview(IPlr) %End of File 三、结果及分析 在 Matlab 命令窗口中 输入 IM_run 并回车,运行程序,弹出如图 2 所示窗口,即为全方位照片展开结果。此时工 作空间窗口显示如图 3。 图 3
分析其中一些重要变量: I iheight iwidth Ibw nExSh icenterX icenterY Rmax IPlr --- 原图像数据矩阵(X×Y×3) --- 原图像的高度 --- 原图像的宽度 --- 原图像二值化并进行圆滑处理后的图像数据矩阵 --- 二值图像进行“扩张-收缩”和“收缩-扩张”的次数 --- 图像展开原点的 X 坐标 --- 图像展开原点的 Y 坐标 --- 展开原点与原图片边缘的最小距离 --- 用极坐标表示的图像数据矩阵(半径×角度×3) 其他变量为中间过渡变量。 对于二值图像,采用“扩张-收缩”算法可以填补图像实体中的漏洞,采用“收缩-扩张” 算法可以去除实体边缘上的毛刺。图 4-a 到图 4-e 依次为原图像进行二值化、二值图 4 次扩 张、4 次收缩、4 次收缩、4 次扩张后的形貌(按上述顺序操作),可以看出,经过这样的处 理后,图片中间的黑色圆形变得饱满且容易辨认。此时计算出它的重心坐标,就可以认为是 图像展开时的坐标原点。 (a) (b) (c) (d) (e) 图 4 四、总结 上述程序中把圆周分为了 360 等份,每一度对应于新图像中的一个单位宽度。这就是说, 对图中像素进行角度定位时,可以精确到 1 度。若需要更高的定位精度,可增大变量 Cout 的值,将圆周分成更多份。 进行极坐标变换时,各点颜色的插值在最初方案中采用的是最近邻点法,输出图片有明 显的锯齿现象。改进后采用了线性加权四点内插法,使图片内部各要素边界连续、颜色变化 自然,质量得到了很大提高。 另外,选取展开原点时,利用了二值化后图片中心处的孤立黑色圆,这意味着此程序只 适用于中心有明显标志物的图片。对于中心为空白、中心与周围物体相连或者中心有较高亮 度的图片,这种算法可能会产生错误。更优、更具有普遍性的算法有待进一步研究。
分享到:
收藏