由于前面的转化的图还不理想,这里再改进一下。
主要是哪个纬线是两头翘的,如果两边下压,或者中间拉长,可能会好一点;
另外,前面的边界点好象平滑,用多项式拟合下。所以分成二个.m文件
第一部分:
%世界地图校正
clear;clc;
rgb = imread('map0.jpg');
% 调试时缩小图像。
% rgb = imresize(rgb,0.2);
% figure,imshow(rgb) ;
[ h, w, v ] = size(rgb);
%建一个空图
Image = zeros ( h,w,v );
Image = uint8 ( Image );
ri0=zeros(1,h);%记录边界点位置(水平,右)
%找到右边界点
b=rgb(:,:,1);%一通道
pp=250;%阈值230,大于该值就是四角的白色了
for i=1: h
for j=w:-1: fix(w/3) % 从右到左 %fix去掉小数部分(取整)
if b(i, j)<pp %不是白色,则是球边界
ri0(i)=j;
Image(i,j,1)=255;%红色
break;
end
end
end
figure,imshow(Image) ;%(显示)边界准确吗?
%=============================================
%由于边界数据有的不太准确,用曲线拟合平滑一下
fx=1:1:h;
fy=ri0;
y1=polyfit(fx,fy,7); %*******---调整合适的多项式次数---********
ri1=polyval(y1,fx); %取出拟合后的数据
ri1=fix(ri1);%拟合出有小数
for i=1: h
if ri1(i)>w;ri1(i)=w;end;%减掉大于图宽的
Image(i,w-ri1(i)+1,1)=255;%红色
end
figure,imshow(Image) ;%(显示)边界准确吗?
%

博客介绍了如何改进世界地图到球纹理的转换过程,主要解决纬线两端翘起的问题,通过多项式拟合平滑边界点。内容分为两个MATLAB文件,最终实现南、北极圈接近圆形,但地图空白区是此类转换的固有缺陷。
最低0.47元/天 解锁文章
48

被折叠的 条评论
为什么被折叠?



