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

10 vues (au cours des 30 derniers jours)
Muhammad Farhan  Mughal
Muhammad Farhan Mughal le 9 Sep 2019
Commenté : darova le 10 Sep 2019
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
  2 commentaires
KALYAN ACHARJYA
KALYAN ACHARJYA le 9 Sep 2019
Attach sample image, so that we can try on it? Skin color?
Muhammad Farhan  Mughal
Muhammad Farhan Mughal le 10 Sep 2019
One of the figure from internet is

Connectez-vous pour commenter.

Réponse acceptée

Muhammad Farhan  Mughal
Muhammad Farhan Mughal le 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;
  5 commentaires
Muhammad Farhan  Mughal
Muhammad Farhan Mughal le 10 Sep 2019
Yes, you can I also wrote that code for research purposes.
darova
darova le 10 Sep 2019
download.jpg

Connectez-vous pour commenter.

Plus de réponses (1)

darova
darova le 9 Sep 2019
See attached script
clc, clear
A = imread('masson.jpg');
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)
  7 commentaires
Muhammad Farhan  Mughal
Muhammad Farhan Mughal le 10 Sep 2019
No, I didn't.
darova
darova le 10 Sep 2019
Good. Don't do this

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by