找来一张高清世界地图:
运行我们的程序:
图像比较清楚,可惜有块空白。
如果能把它两边拉长变成长方图,估计会好一点。
用matlab来做这个事情:
%世界地图校正
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(h);%记录边界点位置(水平,右)
%找到右边界点
b=rgb(:,:,1);%一通道
pp=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) ;%(显示)边界准确吗?
%放大到长方形
for i=1: h %fix去掉小数部分(取整)
left=w-ri0(i)+1;
im=rgb(i:i,left:ri0(i),:);%一行
im= imresize(im, [1 w]);%放大
Image(i:i,1:w,:)=im;%到目标图
end
figure,imshow(Image) ;%最终图
imwrite(Image,'world0.jpg');
运行图;
已经成方形了,再试试效果:
这样生拉硬套还是有一点点效果的,虽然有些地方惨不忍睹。
还得改进