Initial Commit
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 654 KiB |
|
After Width: | Height: | Size: 14 MiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 3.1 MiB |
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env python3
|
||||
#SkinDetection.py
|
||||
|
||||
# This program runs all 4 skin detection algorithms one after the other
|
||||
# Run `python3 SkinDetection.py Path/To/Image` to specify
|
||||
# inital image, removing this command arguements will result in
|
||||
# the script attempting hard coded locations so errors may arise
|
||||
# The
|
||||
|
||||
from PIL import Image
|
||||
import math
|
||||
import colorsys
|
||||
import sys
|
||||
|
||||
#Explicitly Defined Skin Region Model
|
||||
def EDSRModel(image_path):
|
||||
im = Image.open(image_path)
|
||||
pixels = im.load()
|
||||
rgb_im = im.convert('RGB')
|
||||
for i in range(im.size[0]):
|
||||
for j in range(im.size[1]):
|
||||
r,g,b = rgb_im.getpixel((i,j))
|
||||
if r > 95 and g > 40 and b > 20 and (max(r, g, b) - min(r, g, b)) > 15 and abs(r - g) > 15 and r > g and r > b:
|
||||
x = j
|
||||
y = i
|
||||
else:
|
||||
pixels[i,j] = (0,0,0)
|
||||
|
||||
im.save("Results/Explicitly-Defined-Skin-Region.png")
|
||||
|
||||
#Colour Segmentation in Normalization rg Color Model
|
||||
def NormalizationrgModel(image_path):
|
||||
im = Image.open(image_path)
|
||||
pixels = im.load()
|
||||
rgb_im = im.convert('RGB')
|
||||
for i in range(im.size[0]):
|
||||
for j in range(im.size[1]):
|
||||
r,g,b = rgb_im.getpixel((i,j))
|
||||
|
||||
R = 0.0
|
||||
G = 0.0
|
||||
B = 0.0
|
||||
|
||||
if r > 0 or g > 0 or b > 0:
|
||||
R = r/float(r+g+b)
|
||||
G = g/float(r+g+b)
|
||||
B = b/float(r+g+b)
|
||||
|
||||
if 0.465 >= R >= 0.36 and 0.363 >= G >= 0.28:
|
||||
x = j
|
||||
y = i
|
||||
else:
|
||||
pixels[i,j] = (0,0,0)
|
||||
|
||||
im.save("Results/Normalizationrg.png")
|
||||
|
||||
#Color Segmentation in HSV Color Model
|
||||
def HSVModel(image_path):
|
||||
im = Image.open(image_path)
|
||||
pixels = im.load()
|
||||
rgb_im = im.convert('RGB')
|
||||
for i in range(im.size[0]):
|
||||
for j in range(im.size[1]):
|
||||
r,g,b = rgb_im.getpixel((i,j))
|
||||
|
||||
r = r/255.0
|
||||
g = g/255.0
|
||||
b = b/255.0
|
||||
|
||||
h,s,v = colorsys.rgb_to_hsv(r,g,b)
|
||||
|
||||
h = h*255
|
||||
|
||||
if 50 >= h >= 0 and 0.68 >= s >= 0.2 and 1 >= v >= 0.35:
|
||||
x = j
|
||||
y = i
|
||||
else:
|
||||
pixels[i,j] = (0,0,0)
|
||||
|
||||
im.save("Results/HSV.png")
|
||||
|
||||
#Color Segmentation in YCBCR Color Model
|
||||
def YCBCRModel(image_path):
|
||||
im = Image.open(image_path)
|
||||
pixels = im.load()
|
||||
ycbcr_im = im.convert('YCbCr')
|
||||
for i in range(im.size[0]):
|
||||
for j in range(im.size[1]):
|
||||
y,Cb,Cr = ycbcr_im.getpixel((i,j))
|
||||
|
||||
if 142.5 >= Cb >= 97.5 and 134 >= Cr >= 17:
|
||||
pixels[i,j] = (0,0,0)
|
||||
else:
|
||||
x = i
|
||||
y = j
|
||||
|
||||
im.save("Results/YCBCR.png")
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
image_path = "Images/skin.jpg"
|
||||
else:
|
||||
image_path = args[0]
|
||||
|
||||
EDSRModel(image_path)
|
||||
NormalizationrgModel(image_path)
|
||||
HSVModel(image_path)
|
||||
YCBCRModel(image_path)
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||