Algoritmo de desenfoque de caja: con implementación de Python

Los píxeles de una imagen se representan como números enteros. Después de desenfocar, cada píxel ‘x’ de la imagen resultante tiene un valor igual al promedio de los píxeles que rodean a ‘x’, incluida ‘x’. Por ejemplo, considere una imagen de 3 * 3 como

  image = \begin{bmatrix} 1 & 1  & 1\\  1 & 7 & 1\\  1 & 1 & 1 \end{bmatrix}
Then, the resulting image after blur is blurred_image =  \begin{bmatrix} 1 \end{bmatrix}
So, the pixel of blurred image is calculated as (1 + 1 + 1 + 1 + 7 + 1 + 1 + 1 + 1) / 9 = 1.66666 = 1

Algoritmo de desenfoque de cuadro –

El desenfoque de cuadro también se conoce como filtro lineal de cuadro. Los desenfoques de cuadro se utilizan con frecuencia para aproximar el desenfoque gaussiano.

Un desenfoque de cuadro generalmente se implementa como un efecto de imagen que afecta a toda la pantalla. El color borroso del píxel actual es el promedio del color del píxel actual y sus 8 píxeles vecinos.

Nota: Para cada array de 3 * 3 píxeles, hay un píxel borroso calculado como se indicó anteriormente.

Por ejemplo, considere la siguiente imagen.
  image = \begin{bmatrix} 7 & 4 & 0 & 1\\  5 & 6 & 2 & 2\\  6 & 10 & 7 & 8\\  1 & 4 & 2 & 0 \end{bmatrix}
Su imagen borrosa se muestra a continuación:
  blurred\_image = \begin{bmatrix} 5 & 4\\  4 & 4 \end{bmatrix}

Explicación:
Hay cuatro arrays de 3 * 3 posibles en la imagen de arriba. Entonces hay 4 píxeles borrosos en la imagen resultante. Las cuatro arrays son:

  \begin{bmatrix} 7 & 4 & 0\\  5 & 6 & 2\\  6 & 10 & 7 \end{bmatrix},

  \begin{bmatrix} 4 & 0 & 1\\  6 & 2 & 2\\  10 & 7 & 8 \end{bmatrix},

 \begin{bmatrix} 5 & 6 & 2\\  6 & 10 & 7\\  1 & 4 & 2 \end{bmatrix},
and
 \begin{bmatrix} 6 & 2 & 2\\  10 & 7 & 8\\  4 & 2 & 0 \end{bmatrix} 

 
Implementación en Python:

def square_matrix(square):
    """ This function will calculate the value x 
       (i.e. blurred pixel value) for each 3 * 3 blur image.
    """
    tot_sum = 0
      
    # Calculate sum of all the pixels in 3 * 3 matrix
    for i in range(3):
        for j in range(3):
            tot_sum += square[i][j]
              
    return tot_sum // 9     # return the average of the sum of pixels
  
def boxBlur(image):
    """
    This function will calculate the blurred 
    image for given n * n image. 
    """
    square = []     # This will store the 3 * 3 matrix 
                 # which will be used to find its blurred pixel
                   
    square_row = [] # This will store one row of a 3 * 3 matrix and 
                    # will be appended in square
                      
    blur_row = []   # Here we will store the resulting blurred
                    # pixels possible in one row 
                    # and will append this in the blur_img
      
    blur_img = [] # This is the resulting blurred image
      
    # number of rows in the given image
    n_rows = len(image) 
      
    # number of columns in the given image
    n_col = len(image[0]) 
      
    # rp is row pointer and cp is column pointer
    rp, cp = 0, 0 
      
    # This while loop will be used to 
    # calculate all the blurred pixel in the first row 
    while rp <= n_rows - 3: 
        while cp <= n_col-3:
              
            for i in range(rp, rp + 3):
                  
                for j in range(cp, cp + 3):
                      
                    # append all the pixels in a row of 3 * 3 matrix
                    square_row.append(image[i][j])
                      
                # append the row in the square i.e. 3 * 3 matrix 
                square.append(square_row)
                square_row = []
              
            # calculate the blurred pixel for given 3 * 3 matrix 
            # i.e. square and append it in blur_row
            blur_row.append(square_matrix(square))
            square = []
              
            # increase the column pointer
            cp = cp + 1
          
        # append the blur_row in blur_image
        blur_img.append(blur_row)
        blur_row = []
        rp = rp + 1 # increase row pointer
        cp = 0 # start column pointer from 0 again
      
    # Return the resulting pixel matrix
    return blur_img
  
# Driver code
image = [[7, 4, 0, 1], 
        [5, 6, 2, 2], 
        [6, 10, 7, 8], 
        [1, 4, 2, 0]]
          
print(boxBlur(image))

Producción:

[[5, 4], 
[4, 4]]

Caso de prueba 2:

image = [[36, 0, 18, 9], 
         [27, 54, 9, 0], 
         [81, 63, 72, 45]]
  
print(boxBlur(image))

Producción:

[[40, 30]]

 
Lectura adicional: Box Blur usando la biblioteca PIL | Python

Publicación traducida automáticamente

Artículo escrito por mkumarchaudhary06 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *