Is there a way to overcome For loops for fast processing?

Muhammad Farhan Mughal (view profile)

on 9 Sep 2019
Latest activity Commented on by darova

on 10 Sep 2019

Muhammad Farhan Mughal (view profile)

I have written a following MATLAB code to detect skin color pixels from the RGB image. The output is as expected but being pixel by pixel algorithm, my program is taking too long, expecially for high quality images. Is there a way to take out the for loops for fast processing? Thank you.
[s1,s2,s3] = size(I);
skin_img1 = zeros(s1,s2,s3);
maxR = max(max(R));
minR = min(min(R));
maxG = max(max(G))
minG = min(min(G));
maxB = max(max(B));
minB = min(min(B));
for i = 1:s1
for j = 1:s2
if R(i,j)>90/255
if ( G(i,j)>40/255 && B(i,j)>20/255 && abs(R(i,j)-G(i,j))>15/255 && R(i,j)> G(i,j) && R(i,j) > B(i,j)...
&& (max([R(i,j),G(i,j),B(i,j)])- min([R(i,j),G(i,j),B(i,j)]) >15/255));
% (maxR - minR)>15/255 && (maxG - minG)>15/255 && (maxB - minB)>15/255 )
skin_img1(i,j,:) = I (i,j,:);
end
% else
% if( R(i,j)> G(i,j) && R(i,j) > B(i,j) && R(i,j) - G(i,j)> 5/255 && (abs(G(i,j)-B(i,j))>5/255))
% Skin_Image(i,j,:) = I (i,j,:);
% end
end
end
end

KALYAN ACHARJYA

KALYAN ACHARJYA (view profile)

on 9 Sep 2019
Attach sample image, so that we can try on it? Skin color?

Muhammad Farhan Mughal (view profile)

on 10 Sep 2019
One of the figure from internet is

Muhammad Farhan Mughal (view profile)

on 10 Sep 2019

Following MATLAB code significantly reduced the computatonal cost of the questioned code
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
R = double(R);
G = double(G);
B = double(B);
R = R/255;
G = G/255;
B = B/255;
[s1,s2,s3] = size(I);
skin_img1 = zeros(s1,s2,s3);
index1 = zeros(size(R));
R1 = R(:) ; G1 = R(:); B1 = B(:);
mat_I = [R1,G1,B1]';
index = R >90/255 & G > 40/255 & B>20/255 & abs(R-G)>15/255 & R> G & R > B &...
reshape((max(mat_I)- min(mat_I)) >15/255, [s1,s2]);
index = uint8(index);
skin_img = repmat(index,[1,1,3]).*I;

darova

darova (view profile)

on 10 Sep 2019
Can i use your code for my study research?
Not for commercial purposes

Muhammad Farhan Mughal (view profile)

on 10 Sep 2019
Yes, you can I also wrote that code for research purposes.
darova

darova (view profile)

on 10 Sep 2019 darova (view profile)

on 9 Sep 2019

See attached script
clc, clear
subplot(1,2,1)
imshow(A)
RGB = [40 120 40]; % color you want
e = 40; % color shift / deviation
B = pix_in(A,RGB,e);
B = B + 255.*uint8(~B); % choosing white background
subplot(1,2,2)
imshow(B)

darova

darova (view profile)

on 10 Sep 2019
Did you try to change Color you want?