Philippe Jadoul - 02 june 2023
(The first step to understand Convolutional Neural Networks (CNNs)).
import sys
import os
sys.path.append("/home/ia-serveur/ia/my_lib_functions")
#sys.path.append("/home/ia/ia/my_lib_functions")
from my_functions import *
first_function()
#Function no_print_warning
no_print_warning()
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
#Path Folder Images
path_img = "./img/"
#Function Load Image
#return np_img - nb Channel c
def load_image(img):
input_img = Image.open(img)
plt.figure()
plt.title("Input Image")
plt.imshow(input_img)
plt.show()
# Normalize img
np_img = np.array(input_img) /255.0
c = np_img.shape[2]
return np_img,c
#Function Plot Img R-G-B
def plot_rgb(img_r,img_g,img_b,c):
m = img_r.shape[0]
n = img_r.shape[1]
img_red_show = np.zeros((m,n,c), 'uint8')
img_red_show[:,:,0] = img_r * 255.0
img_green_show = np.zeros((m,n,c), 'uint8')
img_green_show[:,:,1] = img_g * 255.0
img_blue_show = np.zeros((m,n,c), 'uint8')
img_blue_show[:,:,2] = img_b * 255.0
plt.figure(figsize=(15,15))
plt.subplot(1, 3, 1)
plt.title("Read Channel")
plt.imshow(img_red_show)
plt.subplot(1, 3, 2)
plt.title("Green Channel")
plt.imshow(img_green_show)
plt.subplot(1, 3, 3)
plt.title("Blue Channel")
plt.imshow(img_blue_show)
plt.show()
#Function Rebuilt RGB Image from Channel
def rebuilt_rgb(img_r,img_g,img_b,c):
m = img_r.shape[0]
n = img_r.shape[1]
rgbArray = np.zeros((m,n,c),'uint8')
rgbArray[:,:,0] = img_r * 255.0
rgbArray[:,:,1] = img_g * 255.0
rgbArray[:,:,2] = img_b * 255.0
plt.figure(figsize=(15,15))
plt.subplot(1, 2, 1)
plt.title("Input Image")
plt.imshow(in_img)
plt.subplot(1, 2, 2)
plt.title("Convolutional RGB Image")
plt.imshow(rgbArray)
plt.show()
abstract(in_img)
abstract(rgbArray)
in_img,C = load_image(path_img + "test_image.jpg")
print("Shape Image",in_img.shape)
print("Type",in_img.dtype)
abstract(in_img)
#Select Image R-G-B
img_red = in_img[:,:,0]
img_green = in_img[:,:,1]
img_blue = in_img[:,:,2]
def convolve2d(image_c, kernel_c, padding):
# pad
pad = kernel_c.shape[0] - 1
# Flip the kernel
kernel_c = np.flipud(np.fliplr(kernel_c))
if padding == True:
output = np.zeros(shape=((image_c.shape[0])+(2*pad)-(kernel_c.shape[0])+1,
(image_c.shape[1])+(2*pad)-(kernel_c.shape[0])+1))
image_padded = np.zeros((image_c.shape[0] + 2*pad, image_c.shape[1] + 2*pad))
for y in range(image_c.shape[0]):
for x in range(image_c.shape[1]):
image_padded[y+pad][x+pad]=image_c[y][x]
image_to_cv = image_padded
else:
output = np.zeros(shape=((image_c.shape[0])-(kernel.shape[0])+1,
(image_c.shape[1])-(kernel.shape[0])+1))
image_to_cv = image_c
#Convolution
for y in range(image_to_cv.shape[0]-kernel_c.shape[0]+1):
for x in range(image_to_cv.shape[1]-kernel_c.shape[0]+1):
output[y, x] = (kernel_c * image_to_cv[y:y+kernel_c.shape[0],x:x+kernel_c.shape[0]]).sum()
return output
Kernel [0,0,0], [0,1,0], [0,0,0]
kernel = np.array([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
cv_red = convolve2d(img_red,kernel,padding=False)
cv_green = convolve2d(img_green,kernel,padding=False)
cv_blue = convolve2d(img_blue,kernel,padding=False)
plot_rgb(cv_red,cv_green,cv_blue,C)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel [0, -1, 0], [-1, 5, -1], [0, -1, 0]
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel [-1,-1,-1], [-1,8,-1], [-1,-1,-1]
kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel ([1,1,1], [1,1,1], [1,1,1]) * (1/9)
kernel = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
kernel = kernel * (1/9)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel(3x3) ([1,2,1], [2,4,4], [1,2,1]) * (1/16)
kernel = np.array([[1, 2, 1], [2, 4, 2], [1, 2, 1]])
kernel = kernel * (1/16)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel(5x5) ([1,4,6,4,3],[4,18,30,18,4],[6,30,48,30,6],[4,18,30,18,4],[1,4,6,4,1]) * (1/300)
kernel = np.array([[1,4,6,4,3],[4,18,30,18,4],[6,30,48,30,6],[4,18,30,18,4],[1,4,6,4,1]])
kernel = kernel * (1/300)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
in_img,C = load_image(path_img + "Lenna_image.png")
img_red = in_img[:,:,0]
img_green = in_img[:,:,1]
img_blue = in_img[:,:,2]
Kernel [0,0,0], [0,1,0], [0,0,0]
kernel = np.array([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
cv_red = convolve2d(img_red,kernel,padding=False)
cv_green = convolve2d(img_green,kernel,padding=False)
cv_blue = convolve2d(img_blue,kernel,padding=False)
plot_rgb(cv_red,cv_green,cv_blue,C)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel [0, -1, 0], [-1, 5, -1], [0, -1, 0]
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel [-1,-1,-1], [-1,8,-1], [-1,-1,-1]
kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel ([1,1,1], [1,1,1], [1,1,1]) * (1/9)
kernel = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
kernel = kernel * (1/9)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel(3x3) ([1,2,1], [2,4,4], [1,2,1]) * (1/16)
kernel = np.array([[1, 2, 1], [2, 4, 2], [1, 2, 1]])
kernel = kernel * (1/16)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)
Kernel(5x5) ([1,4,6,4,3],[4,18,30,18,4],[6,30,48,30,6],[4,18,30,18,4],[1,4,6,4,1]) * (1/300)
kernel = np.array([[1,4,6,4,3],[4,18,30,18,4],[6,30,48,30,6],[4,18,30,18,4],[1,4,6,4,1]])
kernel = kernel * (1/300)
cv_red = convolve2d(img_red,kernel,padding=True)
cv_green = convolve2d(img_green,kernel,padding=True)
cv_blue = convolve2d(img_blue,kernel,padding=True)
rebuilt_rgb(cv_red,cv_green,cv_blue,C)