唉,我只会用matlab写,看来帮不了你了。我的思路很简单,先将其转化成二值图,再反转,这样洞周围的数据为1,背景及洞内为零;对于洞内的区域,我们对每个元素以其位置为中心,对上、下、左、右四个方向的向量求和,我们可以知道,对该区域,四个方向的和均大于零,而洞外的区域最多也只有三个方向为零,这样就可以找出洞中的每一个元素,对其填充。下面我用matlab写了一个,可以参考一下:clear;clc;I=imread('hole.tif');I=double(I);I=1-I;imshow(I,[]);[mn]=size(I);fori=1:mforj=1:nifI(i,j)==0left=sum(I(i,1:j));right=sum(I(i,j+1:n));up=sum(I(1:i,j));down=sum(I(i+1:m,j));ifleft~=0&&right~=0&&up~=0&&down~=0I(i,j)=1;endendendendI=1-I;I=logical(I);figure,imshow(I)运行结果:
|