MATLAB Answers

How to fill interior as different color

4 views (last 30 days)
M.S. Khan
M.S. Khan on 17 Sep 2019
Commented: Bruno Luong on 18 Sep 2019
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

  4 Comments

Show 1 older comment
Bruno Luong
Bruno Luong on 17 Sep 2019
For those who want to run the code I attach the data apparently from this thread
The result MS Khan want to plot with different colors is in A after runing the code
imagesc(A)
KALYAN ACHARJYA
KALYAN ACHARJYA on 17 Sep 2019
Thanks @Bruno
@M.S. Khan
Are you looking for following one? Bruno provided the answer, please do confirm.
test11.png
M.S. Khan
M.S. Khan on 17 Sep 2019
Yes Mr. Kalyan. i want background as blue, boundary as yellow, filles holes as red and interior as green.
Thanks for cooperation.

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 17 Sep 2019
Edited: Bruno Luong on 17 Sep 2019
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

  15 Comments

M.S. Khan
M.S. Khan on 18 Sep 2019
Thanks Bruno Luong. You are genius. God protect you from devil eyes!!!!
M.S. Khan
M.S. Khan on 18 Sep 2019
Dear Burno, is there any fastest method to save the image like above.?
plz guide me, how can we save that image
Bruno Luong
Bruno Luong on 18 Sep 2019
I fail to see the relationship between saving and coloring. What is your motivation of you asking unrelated question to this thread?
"Please post the question you might have each step as a series of indepent questions."

Sign in to comment.

More Answers (0)

Sign in to answer this question.