MATLAB: How to fill interior as different color

hole fillimage analysisimage processingImage Processing ToolboxMATLABmatrix manipulation

Hi Mathwork community,
Using below code, i can get boundary as blue color and gaps filled as yellow color but i want to fill the interior as green color.
Thanks in advance for all help.
s = load('Result_matrix.mat');
Aorg = s.Aorg;
gapmax = 10;
[m,n] = size(Aorg);
A = double(Aorg>0);
P=[1 2 3;
8 0 4;
7 6 5];
Apad = zeros(m+2,n+2);
maxattempt = 10;
for niter = 1:maxattempt
Apad(2:end-1,2:end-1) = A>0;
B = zeros(m,n,8);
for k=1:8
[i,j] = find(P==k);
B(:,:,k) = Apad(i-2+(2:end-1),j-2+(2:end-1));
end
As = A>0 & sum(diff(B(:,:,[1:8 1]),1,3)==1,3)<=1;
[y,x] = find(As);
if isempty(x)
break
end
p = length(x);
xy = [x,y];
xy1 = reshape(xy,1,[],2);
xy2 = reshape(xy,[],1,2);
d = sum(abs(xy1-xy2),3);
d(d==0) = NaN;
i = (1:size(d,1))';
[dmin,j] = min(d,[],2);
keep = dmin <= gapmax;
i = i(keep);
j = j(keep);
for k=1:length(i)
xyi = xy(i(k),:);
xyj = xy(j(k),:);
dxy = xyi-xyj;
if abs(dxy(1)) > abs(dxy(2))
xr = linspace(xyi(1),xyj(1),abs(dxy(1))+1);
yr = round(interp1([xyi(1),xyj(1)],[xyi(2),xyj(2)],xr));
else
yr = linspace(xyi(2),xyj(2),abs(dxy(2))+1);
xr = round(interp1([xyi(2),xyj(2)],[xyi(1),xyj(1)],yr));
end
A(sub2ind(size(A),yr(2:end-1),xr(2:end-1))) = 3;
end
end

Best Answer

Fill the hole with imfill
Next you can color your integer image by defining the appropriate colormap
% Generate test image contains values in 0:4
[~,~,I]=histcounts(peaks,5);
I = I-1;
imagesc(I)
colormap([1 0 0; % color of 0 value
0 1 0; % color of 1 value
0 0 1; % color of 2 value
0 0 0; % color of 3 value
1 1 1])% color of 4 value
set(gca,'Clim',[-0.5 max(I(:))+0.5]);
colorbar
color.png
Related Question