Réorganisation des fichiers et des fonctions
Ajout de 'main.py' Ajout de : filters\ \sobel.py \canny.py \usefull_func.py All pictures in 'images\' directory had been renamed
39
imageEngine/filters/canny.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
from usefull_func import *
|
||||||
|
from math import sqrt, atan2
|
||||||
|
|
||||||
|
#En_cours...
|
||||||
|
def filtre_canny(img):
|
||||||
|
|
||||||
|
def norme_gradient(pixel1, pixel2):
|
||||||
|
color_x = pixel1[0]
|
||||||
|
color_y = pixel2[0]
|
||||||
|
|
||||||
|
norm = round(sqrt(color_x**2 + color_y**2))
|
||||||
|
norm = min(norm, 255)
|
||||||
|
|
||||||
|
grad = atan2(color_y, color_x)
|
||||||
|
return norm, grad
|
||||||
|
|
||||||
|
def liste_normGrad(im1, im2):
|
||||||
|
liste = []
|
||||||
|
for j in range(len(im1)):
|
||||||
|
ligne = []
|
||||||
|
for i in range(len(im1[0])):
|
||||||
|
normGrad = norme_gradient(im1[j][i], im2[j][i])
|
||||||
|
ligne.append(normGrad)
|
||||||
|
liste.append(ligne)
|
||||||
|
return liste
|
||||||
|
|
||||||
|
if not is_greyscale(img):
|
||||||
|
img = greyscale(img)
|
||||||
|
|
||||||
|
mat_x = [[-1,0,1]]
|
||||||
|
mat_y = [[1],[0],[-1]]
|
||||||
|
|
||||||
|
#lissage/suppression des bri
|
||||||
|
img_no_bruit = convolution_gauss(img)
|
||||||
|
Jx = convolution(img, mat_x)
|
||||||
|
Jy = convolution(img, mat_y)
|
||||||
|
normGrad = liste_normGrad(Jx, Jy)
|
||||||
|
#Suppresion des non-maximum
|
||||||
|
|
16
imageEngine/filters/sobel.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from usefull_func import *
|
||||||
|
|
||||||
|
|
||||||
|
def filtre_sobel(img):
|
||||||
|
|
||||||
|
if not is_greyscale(img):
|
||||||
|
img = greyscale(img)
|
||||||
|
|
||||||
|
mat_x = [[-1,0,1],[-2,0,2],[-1,0,1]]
|
||||||
|
mat_y = [[-1,-2,-1],[0,0,0],[1,2,1]]
|
||||||
|
Gx = convolution(img, mat_x)
|
||||||
|
Gy = convolution(img, mat_y)
|
||||||
|
|
||||||
|
filtred_image = application_norme(Gx,Gy)
|
||||||
|
return filtred_image
|
||||||
|
|
105
imageEngine/filters/usefull_func.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
from math import sqrt
|
||||||
|
|
||||||
|
def greyscale(mat_img):
|
||||||
|
gray_img = []
|
||||||
|
for ligne in mat_img:
|
||||||
|
lig = []
|
||||||
|
for r,g,b in ligne:
|
||||||
|
v = int(r*0.2125 + g*0.7154 + b*0.0721)
|
||||||
|
lig.append((v,)*3)
|
||||||
|
gray_img.append(lig)
|
||||||
|
return gray_img
|
||||||
|
|
||||||
|
def appliquer_convolution(img, mat, i, j):
|
||||||
|
somme = 0
|
||||||
|
for y in range(len(mat)):
|
||||||
|
for x in range(len(mat[0])):
|
||||||
|
pixel_i = i - (len(mat[0]) // 2) + x
|
||||||
|
pixel_j = j - (len(mat) // 2) + y
|
||||||
|
pix = pixel(img, pixel_i, pixel_j)
|
||||||
|
somme += pix[0]*mat[y][x]
|
||||||
|
return min(max(somme,0), 255)
|
||||||
|
|
||||||
|
def convolution(mat_img, mat):
|
||||||
|
return_img = []
|
||||||
|
for j in range(len(mat_img)):
|
||||||
|
ligne = []
|
||||||
|
for i in range(len(mat_img[0])):
|
||||||
|
val = appliquer_convolution(mat_img, mat, i, j)
|
||||||
|
ligne.append((val,)*3)
|
||||||
|
return_img.append(ligne)
|
||||||
|
return return_img
|
||||||
|
|
||||||
|
def is_greyscale(img):
|
||||||
|
_greyscale = True
|
||||||
|
for ligne in img:
|
||||||
|
for r,g,b in ligne:
|
||||||
|
if not (r==g and g==b):
|
||||||
|
_greyscale = False
|
||||||
|
break
|
||||||
|
if not _greyscale:
|
||||||
|
break
|
||||||
|
return _greyscale
|
||||||
|
|
||||||
|
def invert(img):
|
||||||
|
result_image = []
|
||||||
|
for ligne in img:
|
||||||
|
result_ligne = []
|
||||||
|
for r,g,b in ligne:
|
||||||
|
result_ligne.append((255-r, 255-g, 255-b))
|
||||||
|
result_image.append(result_ligne)
|
||||||
|
return result_image
|
||||||
|
|
||||||
|
def pixel(img, i, j, default=(0,0,0)):
|
||||||
|
#i la colone et j la ligne
|
||||||
|
if 0 <= i < len(img[0]) and 0 <= j < len(img):
|
||||||
|
return img[j][i]
|
||||||
|
else:
|
||||||
|
return default
|
||||||
|
|
||||||
|
def reduction_bruit(img, mat, i, j):
|
||||||
|
somme = 0
|
||||||
|
for y in range(len(mat)):
|
||||||
|
for x in range(len(mat[0])):
|
||||||
|
pixel_i = i - (len(mat[0]) // 2) + x
|
||||||
|
pixel_j = j - (len(mat) // 2) + y
|
||||||
|
pix = pixel(img, pixel_i, pixel_j)
|
||||||
|
somme += pix[0]*mat[y][x]
|
||||||
|
normalise = round(somme)
|
||||||
|
return normalise
|
||||||
|
|
||||||
|
def convolution_gauss(mat_img):
|
||||||
|
mat_gauss = [
|
||||||
|
[2/159, 4/159, 5/159, 4/159,2/159],
|
||||||
|
[4/159, 9/159,12/159, 9/159,4/159],
|
||||||
|
[5/159,12/159,15/159,12/159,5/159],
|
||||||
|
[4/159, 9/159,12/159, 9/159,4/159],
|
||||||
|
[2/159, 4/159, 5/159, 4/159,2/159]
|
||||||
|
]
|
||||||
|
|
||||||
|
return_img = []
|
||||||
|
for j in range(len(mat_img)):
|
||||||
|
ligne = []
|
||||||
|
for i in range(len(mat_img[0])):
|
||||||
|
val = reduction_bruit(mat_img, mat_gauss, i, j)
|
||||||
|
ligne.append((val,)*3)
|
||||||
|
return_img.append(ligne)
|
||||||
|
return return_img
|
||||||
|
|
||||||
|
def calcul_norme(pixel1, pixel2):
|
||||||
|
valeur = pixel1[0]**2 + pixel2[0]**2
|
||||||
|
norm = round(sqrt(valeur))
|
||||||
|
norm = int(min(norm, 255))
|
||||||
|
return norm
|
||||||
|
|
||||||
|
def application_norme(im_x, im_y):
|
||||||
|
result_image = []
|
||||||
|
for j in range(len(im_x)):
|
||||||
|
ligne = []
|
||||||
|
for i in range(len(im_x[0])):
|
||||||
|
pixel1 = im_x[j][i]
|
||||||
|
pixel2 = im_y[j][i]
|
||||||
|
norme = calcul_norme(pixel1, pixel2)
|
||||||
|
ligne.append((norme,)*3)
|
||||||
|
result_image.append(ligne)
|
||||||
|
return result_image
|
Before Width: | Height: | Size: 989 KiB |
Before Width: | Height: | Size: 114 B |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 98 B |
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 568 KiB After Width: | Height: | Size: 568 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 340 KiB After Width: | Height: | Size: 340 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 237 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 561 KiB After Width: | Height: | Size: 561 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 540 KiB After Width: | Height: | Size: 540 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 1.4 MiB |
1
imageEngine/main.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
Before Width: | Height: | Size: 81 KiB |
@ -1,294 +0,0 @@
|
|||||||
import umage as um
|
|
||||||
from math import sqrt, atan2, sin, cos, pi
|
|
||||||
|
|
||||||
def greyscale(mat_img):
|
|
||||||
gray_img = []
|
|
||||||
for ligne in mat_img:
|
|
||||||
lig = []
|
|
||||||
for r,g,b in ligne:
|
|
||||||
v = int(r*0.2125 + g*0.7154 + b*0.0721)
|
|
||||||
lig.append((v,)*3)
|
|
||||||
gray_img.append(lig)
|
|
||||||
return gray_img
|
|
||||||
|
|
||||||
def convolution(mat_img, mat):
|
|
||||||
return_img = []
|
|
||||||
for j in range(len(mat_img)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(mat_img[0])):
|
|
||||||
val = appliquer_convolution(mat_img, mat, i, j)
|
|
||||||
ligne.append((val,)*3)
|
|
||||||
return_img.append(ligne)
|
|
||||||
return return_img
|
|
||||||
|
|
||||||
def filtre_sobel(img):
|
|
||||||
|
|
||||||
def calcul_norme(pixel1, pixel2):
|
|
||||||
valeur = pixel1[0]**2 + pixel2[0]**2
|
|
||||||
norm = round(sqrt(valeur))
|
|
||||||
norm = int(min(norm, 255))
|
|
||||||
return norm
|
|
||||||
|
|
||||||
def application_norme(im_x, im_y):
|
|
||||||
result_image = []
|
|
||||||
for j in range(len(im_x)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(im_x[0])):
|
|
||||||
pixel1 = im_x[j][i]
|
|
||||||
pixel2 = im_y[j][i]
|
|
||||||
norme = calcul_norme(pixel1, pixel2)
|
|
||||||
ligne.append((norme,)*3)
|
|
||||||
result_image.append(ligne)
|
|
||||||
return result_image
|
|
||||||
|
|
||||||
if not is_greyscale(img):
|
|
||||||
img = greyscale(img)
|
|
||||||
|
|
||||||
mat_x = [[-1,0,1],[-2,0,2],[-1,0,1]]
|
|
||||||
mat_y = [[-1,-2,-1],[0,0,0],[1,2,1]]
|
|
||||||
Gx = convolution(img, mat_x)
|
|
||||||
Gy = convolution(img, mat_y)
|
|
||||||
|
|
||||||
filtred_image = application_norme(Gx,Gy)
|
|
||||||
return filtred_image
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
########################Exercices Supplémentaires########################
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
def is_greyscale(img):
|
|
||||||
_greyscale = True
|
|
||||||
for ligne in img:
|
|
||||||
for r,g,b in ligne:
|
|
||||||
if not (r==g and g==b):
|
|
||||||
_greyscale = False
|
|
||||||
break
|
|
||||||
if not _greyscale:
|
|
||||||
break
|
|
||||||
return _greyscale
|
|
||||||
|
|
||||||
def invert(img):
|
|
||||||
result_image = []
|
|
||||||
for ligne in img:
|
|
||||||
result_ligne = []
|
|
||||||
for r,g,b in ligne:
|
|
||||||
result_ligne.append((255-r, 255-g, 255-b))
|
|
||||||
result_image.append(result_ligne)
|
|
||||||
return result_image
|
|
||||||
|
|
||||||
def pixel(img, i, j, default=(0,0,0)):
|
|
||||||
#i la colone et j la ligne
|
|
||||||
if 0 <= i < len(img[0]) and 0 <= j < len(img):
|
|
||||||
return img[j][i]
|
|
||||||
else:
|
|
||||||
return default
|
|
||||||
|
|
||||||
def appliquer_convolution(img, mat, i, j):
|
|
||||||
somme = 0
|
|
||||||
for y in range(len(mat)):
|
|
||||||
for x in range(len(mat[0])):
|
|
||||||
pixel_i = i - (len(mat[0]) // 2) + x
|
|
||||||
pixel_j = j - (len(mat) // 2) + y
|
|
||||||
pix = pixel(img, pixel_i, pixel_j)
|
|
||||||
somme += pix[0]*mat[y][x]
|
|
||||||
return min(max(somme,0), 255)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
|
||||||
########################Exercices personnelles########################
|
|
||||||
######################################################################
|
|
||||||
def convolution_gauss(mat_img):
|
|
||||||
mat_gauss = [
|
|
||||||
[2/159, 4/159, 5/159, 4/159,2/159],
|
|
||||||
[4/159, 9/159,12/159, 9/159,4/159],
|
|
||||||
[5/159,12/159,15/159,12/159,5/159],
|
|
||||||
[4/159, 9/159,12/159, 9/159,4/159],
|
|
||||||
[2/159, 4/159, 5/159, 4/159,2/159]
|
|
||||||
]
|
|
||||||
|
|
||||||
return_img = []
|
|
||||||
for j in range(len(mat_img)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(mat_img[0])):
|
|
||||||
val = reduction_bruit(mat_img, mat_gauss, i, j)
|
|
||||||
ligne.append((val,)*3)
|
|
||||||
return_img.append(ligne)
|
|
||||||
return return_img
|
|
||||||
|
|
||||||
def reduction_bruit(img, mat, i, j):
|
|
||||||
somme = 0
|
|
||||||
for y in range(len(mat)):
|
|
||||||
for x in range(len(mat[0])):
|
|
||||||
pixel_i = i - (len(mat[0]) // 2) + x
|
|
||||||
pixel_j = j - (len(mat) // 2) + y
|
|
||||||
pix = pixel(img, pixel_i, pixel_j)
|
|
||||||
somme += pix[0]*mat[y][x]
|
|
||||||
normalise = round(somme)
|
|
||||||
return normalise
|
|
||||||
|
|
||||||
def filtre_canny(img):
|
|
||||||
|
|
||||||
def norme_gradient(pixel1, pixel2):
|
|
||||||
color_x = pixel1[0]
|
|
||||||
color_y = pixel2[0]
|
|
||||||
|
|
||||||
norm = round(sqrt(color_x**2 + color_y**2))
|
|
||||||
norm = min(norm, 255)
|
|
||||||
|
|
||||||
grad = atan2(color_y, color_x)
|
|
||||||
return norm, grad
|
|
||||||
|
|
||||||
def liste_normGrad(im1, im2):
|
|
||||||
liste = []
|
|
||||||
for j in range(len(im1)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(im1[0])):
|
|
||||||
normGrad = norme_gradient(im1[j][i], im2[j][i])
|
|
||||||
ligne.append(normGrad)
|
|
||||||
liste.append(ligne)
|
|
||||||
return liste
|
|
||||||
|
|
||||||
if not is_greyscale(img):
|
|
||||||
img = greyscale(img)
|
|
||||||
|
|
||||||
mat_x = [[-1,0,1]]
|
|
||||||
mat_y = [[1],[0],[-1]]
|
|
||||||
|
|
||||||
#lissage/suppression des bri
|
|
||||||
img_no_bruit = convolution_gauss(img)
|
|
||||||
Jx = convolution(img, mat_x)
|
|
||||||
Jy = convolution(img, mat_y)
|
|
||||||
normGrad = liste_normGrad(Jx, Jy)
|
|
||||||
|
|
||||||
#Suppresion des non-maximum
|
|
||||||
|
|
||||||
|
|
||||||
#temp
|
|
||||||
def norme_gradient(pixel1, pixel2):
|
|
||||||
color_x = pixel1[0]
|
|
||||||
color_y = pixel2[0]
|
|
||||||
|
|
||||||
norm = round(sqrt(color_x**2 + color_y**2))
|
|
||||||
norm = min(norm, 255)
|
|
||||||
|
|
||||||
grad = atan2(color_y, color_x)
|
|
||||||
return norm, grad
|
|
||||||
|
|
||||||
#temp
|
|
||||||
def liste_normGrad(im1, im2):
|
|
||||||
liste = []
|
|
||||||
for j in range(len(im1)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(im1[0])):
|
|
||||||
normGrad = norme_gradient(im1[j][i], im2[j][i])
|
|
||||||
ligne.append(normGrad)
|
|
||||||
liste.append(ligne)
|
|
||||||
return liste
|
|
||||||
|
|
||||||
mat_x = [[-1,0,1]]
|
|
||||||
mat_y = [[1],[0],[-1]]
|
|
||||||
#temp
|
|
||||||
#lissage
|
|
||||||
img = um.load("imageEngine\\images\\valve.png")
|
|
||||||
img = convolution_gauss(img)
|
|
||||||
Jx = convolution(img, mat_x)
|
|
||||||
Jy = convolution(img, mat_y)
|
|
||||||
normGrad = liste_normGrad(Jx, Jy)
|
|
||||||
###########
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def find_neighbord_norm(mat, i, j, rad):
|
|
||||||
x = 0
|
|
||||||
y = 0
|
|
||||||
if sin(pi/8) <= abs(sin(rad)):
|
|
||||||
y = 1
|
|
||||||
if cos(3*pi/8)>abs(cos(rad)):
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
norm_pix1 = -1
|
|
||||||
norm_pix2 = -1
|
|
||||||
if 0 <= j-y < len(mat):
|
|
||||||
if 0 <= i-x < len(mat[0]):
|
|
||||||
norm_pix1 = mat[j-y][i-x][0]
|
|
||||||
if 0 <= j+y < len(mat):
|
|
||||||
if 0 <= i+x < len(mat[0]):
|
|
||||||
norm_pix2 = mat[j+y][i+x][0]
|
|
||||||
|
|
||||||
return norm_pix1, norm_pix2
|
|
||||||
|
|
||||||
def delete_pixel(mat_img, mat):
|
|
||||||
img_to_return = []
|
|
||||||
for j in range(len(mat)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(mat[0])):
|
|
||||||
rad = mat[j][i][1]
|
|
||||||
norms = find_neighbord_norm(mat, i, j, rad)
|
|
||||||
if rad < norms[0] or rad < norms[1]:
|
|
||||||
ligne.append((0,)*3)
|
|
||||||
else:
|
|
||||||
ligne.append(mat_img[j][i])
|
|
||||||
img_to_return.append(ligne)
|
|
||||||
return img_to_return
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
def hysteresis(mat_img, mat_norm, Th):
|
|
||||||
Tl = Th / 2
|
|
||||||
mat_img = yesOrNo(mat_img, Th, Tl)
|
|
||||||
result_image = []
|
|
||||||
for j in range(len(mat_img)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(mat_img[0])):
|
|
||||||
rad = mat_norm[j][i][1]
|
|
||||||
color1, color2 = find_neighbord_pixel(mat_img, i, j, rad+(pi/2))
|
|
||||||
if color1 == 255 or color2 == 255:
|
|
||||||
ligne.append((255,)*3)
|
|
||||||
else:
|
|
||||||
ligne.append((0,)*3)
|
|
||||||
result_image.append(ligne)
|
|
||||||
return result_image
|
|
||||||
|
|
||||||
def find_neighbord_pixel(mat_image, i, j, rad):
|
|
||||||
x = 0
|
|
||||||
y = 0
|
|
||||||
if sin(pi/8) <= abs(sin(rad)):
|
|
||||||
y = 1
|
|
||||||
if cos(3*pi/8)>abs(cos(rad)):
|
|
||||||
x = 1
|
|
||||||
|
|
||||||
color_pix1 = 0
|
|
||||||
color_pix2 = 0
|
|
||||||
if 0 <= j-y < len(mat_image):
|
|
||||||
if 0 <= i-x < len(mat_image[0]):
|
|
||||||
color_pix1 = mat_image[j-y][i-x][0]
|
|
||||||
if 0 <= j+y < len(mat_image):
|
|
||||||
if 0 <= i+x < len(mat_image[0]):
|
|
||||||
color_pix2 = mat_image[j+y][i+x][0]
|
|
||||||
|
|
||||||
return color_pix1, color_pix2
|
|
||||||
|
|
||||||
def yesOrNo(mat_img, Th, Tl):
|
|
||||||
result_image = []
|
|
||||||
for j in range(len(mat_img)):
|
|
||||||
ligne = []
|
|
||||||
for i in range(len(mat_img[0])):
|
|
||||||
pix = mat_img[j][i]
|
|
||||||
if Th <= pix[0]:
|
|
||||||
ligne.append((255,)*3)
|
|
||||||
elif pix[0] < Tl:
|
|
||||||
ligne.append((0,)*3)
|
|
||||||
else:
|
|
||||||
ligne.append(pix)
|
|
||||||
result_image.append(ligne)
|
|
||||||
return result_image
|
|
||||||
|
|
||||||
|
|
||||||
zt_no_maxima = delete_pixel(img, normGrad)
|
|
||||||
zt_hysteresis = hysteresis(zt_no_maxima, normGrad, 200)
|
|
||||||
|
|
||||||
um.save(zt_hysteresis, "imageEngine\\test\\valve", "png")
|
|
||||||
"""
|
|
Before Width: | Height: | Size: 392 KiB |