快速扫描算法提取鱼眼图像有效区域
这个原理还是来自于《鱼眼图像校正算法研究》 这是作者在这篇论文中提出的自己改进的算法(我姑且叫它快速扫描算法吧)
A=imread('F:\orl_zhifangtu\yuyan1.jpg');
>> T=40;
>> [m,n,k]=size(A);
for i=1:m-1
for j=1:n
I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
if(I(i,j)>=T)
I(i+1,j)=0.59*A(i+1,j,1)+0.11*A(i+1,j,2)+0.3*A(i+1,j,3);
if(I(i+1,j)>=T)
bottom=j;
break;
end
end
end
end
for i=m:-1:2
for j=1:n
I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
if(I(i,j)>=T)
I(i-1,j)=0.59*A(i-1,j,1)+0.11*A(i-1,j,2)+0.3*A(i-1,j,3);
if(I(i-1,j)>=T)
top=i;
break;
end
end
end
end
for j=1:n-1
for i=1:m
I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
if(I(i,j)>=T)
I(i,j+1)=0.59*A(i,j+1,1)+0.11*A(i,j+1,2)+0.3*A(i,j+1,3);
if(I(i,j+1)>=T)
right=j;
break;
end
end
end
end
for j=n:-1:2
for i=1:m
I(i,j)=0.59*A(i,j,1)+0.11*A(i,j,2)+0.3*A(i,j,3);
if(I(i,j)>=T)
I(i,j-1)=0.59*A(i,j-1,1)+0.11*A(i,j-1,2)+0.3*A(i,j-1,3);
if(I(i,j-1)>=T)
left=j;
break;
end
end
end
end
>> R=max(abs((right-left)/2),abs((bottom-top)/2));
B=imcrop(A,[left,top,2*R,2*R]);
>> imshow(B)
这是效果图
原图是如下:
这个算法大大的节约了时间 等一秒就出来了 不像之前那个逐行逐列扫描算法和区域生长算法一样要等那么久
后来我又换了一幅鱼眼图 又试了下 原图:
下面是效果图:
提取效果还是挺好的 作者的这个算法真的比区域生长算法省了太多时间 因为区域生长是遍历了所有像素点 而且每次还会重复很多 而这个的次数就很少 因为只扫描了除了这个外接正方形以外的区域 所以很省时间