This commit is contained in:
Debucquoy
2023-09-20 15:18:20 +02:00
parent 00d0cdfaf3
commit 4fd7542f03
228 changed files with 351 additions and 12 deletions

BIN
bac1/q1/03nov/convo1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

BIN
bac1/q1/03nov/convo2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

BIN
bac1/q1/03nov/convo3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

BIN
bac1/q1/03nov/final.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

BIN
bac1/q1/03nov/final2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 KiB

BIN
bac1/q1/03nov/gray.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

111
bac1/q1/03nov/main.py Normal file
View File

@ -0,0 +1,111 @@
from umage import load, save, show_image
from math import atan2, cos
def grayscale(img_mat):
"""Transform an image into gray
:img_mat: image en entree
:returns: grayscale de limage em entree
"""
new_matrix = list()
for row in range(len(img_mat)):
new_matrix.append(list())
for column in img_mat[row]:
_r, _g, _b = column
gray = round(0.2125 * _r + 0.7154 * _g + 0.0721 * _b)
new_matrix[row].append((gray, gray, gray))
return new_matrix
def convolution(img_mat, mat):
"""effectue le passage d'une matrice de convolution sur une image grise
TODO: image de couleurs
:img_mat: image en entree
:mat: matrice de convolution
:returns: image retouchee
"""
new_matrix = list()
for row in range(len(img_mat)):
new_matrix.append(list())
for column in range(len(img_mat[row])):
# _gray = img_mat[row][column][0]
_sum = 0
for mat_row in range(len(mat)):
for mat_column in range(len(mat[mat_row])):
diff_row = mat_row - len(mat)//2
diff_col = mat_column - len(mat[mat_column])//2
if dans_image(img_mat, row+diff_row, column+ diff_col):
_sum += mat[mat_row][mat_column] * img_mat[row + diff_row][column + diff_col][0]
new_matrix[row].append((_sum, _sum, _sum))
return new_matrix
def dans_image(img_mat, row, col):
if row < len(img_mat)-1 and row > 0 and col < len(img_mat[0])-1 and col > 0:
return True
return False
def calculate_direction(img1, img2):
"""Calculate the image direction of 2 image that has been trough gx and gy of phobels formula
:img1: x image of fobel
:img2: y image of fobel
:returns: matrix of direction
"""
res = list()
for row in range(len(img1)):
res.append(list())
for col in range(len(img1[row])):
res[row].append(atan2(img2[row][col][0], img1[row][col][0]))
return res
def dir_mat_to_img(mat):
"""take a matrix with direction and transform it in image with direction hue """
res = list()
for row in range(len(mat)):
res.append(list())
for col in range(len(mat[row])):
res[row].append((round(256*cos(mat[row][col])), round(256*cos(mat[row][col] + 120)), round(256*cos(mat[row][col] - 120))))
return res
if __name__ == "__main__":
unit = [
[0, 1, 0],
[0, 0, 0],
[0, 0, 0]]
convolution1 = [
[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]
convolution2 = [
[-1, -1, -1],
[-1, 9, -1],
[-1, -1, -1]]
convolution3 = [
[-2, 0, 0],
[ 0, 1, 0],
[ 0, 0, 2]]
phobel1 = [
[ 1, 0, -1],
[ 2, 1, -2],
[ 1, 0, -1]]
phobel2 = [
[ 1, 2, 1],
[ 0, 0, 0],
[ -1, -2, -1]]
img = load('./myimg.jpg')
new_image = grayscale(img)
convolution(new_image, convolution2)
phob1_img = convolution(new_image, phobel1)
phob2_img = convolution(new_image, phobel2)
final = dir_mat_to_img(calculate_direction(phob2_img, phob1_img))
save(final, 'final2')

BIN
bac1/q1/03nov/myimg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
bac1/q1/03nov/serie7.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1,13 @@
Traceback (most recent call last):
File "/home/tonitch/.local/lib/python3.10/site-packages/pudb/__init__.py", line 148, in runscript
dbg._runscript(mainpyfile)
File "/home/tonitch/.local/lib/python3.10/site-packages/pudb/debugger.py", line 519, in _runscript
self.run(statement)
File "/usr/lib/python3.10/bdb.py", line 597, in run
exec(cmd, globals, locals)
File "<string>", line 1, in <module>
File "main.py", line 65, in <module>
final_img = convolution(new_image, unit)
File "main.py", line 41, in convolution
_sum += mat[mat_row][mat_column] * img_mat[row + diff_row][column + diff_col][0]
IndexError: list index out of range

35
bac1/q1/03nov/umage.py Normal file
View File

@ -0,0 +1,35 @@
#!/usr/bin/env python3
from PIL import Image # Requires python-image-library (pillow)
import itertools
def load(filename):
""" Given a filename that matches an image file,
return a list of lists of tuples corresponding to the list of
lines of pixels (R, G, B) of the image. """
with Image.open(filename, 'r') as image:
image = image.convert('RGB')
content = list(image.getdata())
size_x, size_y = image.size
return [content[i:i + size_x] for i in range(0, len(content), size_x)]
def save(image, filename='new', extension='jpg'):
""" Stores the given image into a file. The name
of the file is set to <filename>.<extension> which is
'new.jpg' by default. """
size_x, size_y = len(image), len(image[0])
new_image = Image.new('RGB', (size_y, size_x))
new_image.putdata(list(itertools.chain.from_iterable(image)))
new_image.save('%s.%s' % (filename, extension))
def show_image(image):
""" Show the image to the user. """
size_x, size_y = len(image), len(image[0])
new_image = Image.new('RGB', (size_y, size_x))
new_image.putdata(list(itertools.chain.from_iterable(image)))
new_image.show()