1、 255;% choose background object, and B results into the Foreground Object and the% Boundary Region% choose the outer line of the boundary region. Single left click the mouse to specify vertice.Double left click or single right click to finish;OuterBW = roipoly(A);B(:,:,1) = immultiply(A(:,1),OuterBW
2、);,2) = immultiply(A(:,2),OuterBW);,3) = immultiply(A(:,3),OuterBW);Back(:,1),OuterBW);,2),OuterBW);,3),OuterBW);imshow(B);% choose foreground object, and C results into a Circle of Interest% choose the inner line of the boundary region. Single left click the mouse to specify vertice.Double left cli
3、ck or single right click to finish;InnerBW = roipoly(B);C(:,1) = immultiply(B(:,1),InnerBW);,2) = immultiply(B(:,2),InnerBW);,3) = immultiply(B(:,3),InnerBW);Fore(:,1),InnerBW);,2),InnerBW);,3),InnerBW);imshow(C);hold off;RawAlpha = (double(OuterBW)+double(InnerBW)/2;I = double(A);% Method of averag
4、ing to get raw fore and background colorsfor i = 1:size(RawAlpha,1) for j = 1:size(RawAlpha,2) RawFore(i,j,1)=0; RawFore(i,j,2)=0; RawFore(i,j,3)=0; RawBack(i,j,1)=0; RawBack(i,j,2)=0; RawBack(i,j,3)=0; if RawAlpha(i,j) = 1 RawFore(i,j,:)=Fore(i,j,: end; if RawAlpha(i,j) = 0 RawBack(i,j,:)=Back(i,j,
5、: if RawAlpha(i,j) = 0.5 r=1; while 1 TestFore = InnerBW(max(i-r,1):min(i+r,size(A,1),max(j-r,1):min(j+r,size(A,2); if size(find(TestFore),1) i1, j1 = find(TestFore); i2 = i1 + max(i-r,1) -1; j2 = j1 + max(j-r,1) -1; Rs = double(Fore(i2,j2,:); Ds(:,1)=diag(Rs(:,1);,2)=diag(Rs(:,2);,3)=diag(Rs(:,3);
6、if size(Ds,1) = 1) =Ds; else) = sum(Ds) / size(Ds,1); clear Ds; break; r=r+1; TestBack = OuterBW(max(i-r,1): if size(find(TestBack),1) i1, j1 = find(TestBack); Rs = double(Back(i2,j2,:end;%此处没有用高斯滤波Denorm = RawFore - RawBack;%red channelI1 = I(:,1);Denorm1 = Denorm(:for i=1:size(Denorm1,1)for j= 1:
7、size(Denorm1,2)if Denorm1(i,j)=0Denorm1(i,j)=1;OldAlpha = RawAlpha;NewAlpha = RawAlpha;h1=0;while 1size(OldAlpha,1)for j=1:size(OldAlpha,2)NewAlpha(i,j) = OldAlpha(i,j);if RawAlpha(i,j) = 0.5Roui = (I1(i+1,j) + I1(i-1,j) - 2 * I1(i,j) * Denorm1(i,j) - (I1(i+1,j) - I1(i,j) * (Denorm1(i+1,j) - Denorm1
8、(i,j)/(Denorm1(i,j) * Denorm1(i,j);Rouj = (I1(i,j+1) + I1(i,j-1) - 2 * I1(i,j) * Denorm1(i,j) - (I1(i,j+1) - I1(i,j) * (Denorm1(i,j+1) - Denorm1(i,j)/(Denorm1(i,j) * Denorm1(i,j);Rou = Roui + Rouj;NewAlpha(i,j) = (OldAlpha(i+1,j) + NewAlpha(i-1,j) + OldAlpha(i,j+1) + NewAlpha(i,j-1) - Rou) / 4;if NewAlpha(i,j)1NewAlpha(i,j)=1; % imshow(uint8(NewAlpha*255);DifferenceAlpha = abs(NewAlpha - OldAlpha);OldAlpha = NewAlpha;if sum(sum(DifferenceAlpha
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1