Você está na página 1de 7

17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.

ipynb - Colaboratory

import numpy as np

#from PIL import Image

import cv2 

import statistics

from google.colab.patches import cv2_imshow

import matplotlib.pyplot as plt

from collections import Counter

from google.colab import drive

drive.mount('/content/drive')

Mounted at /content/drive

Importando as imagens que serão usadas

sp = cv2.imread("/content/drive/MyDrive/Processamento de Imagem/T4/lena_salt_peppers.jpg", 

gauss = cv2.imread("/content/drive/MyDrive/Processamento de Imagem/T4/lena_gauss.jpg", 0)

poisson = cv2.imread("/content/drive/MyDrive/Processamento de Imagem/T4/lena_poisson.jpg", 

retina = cv2.imread("/content/drive/MyDrive/Processamento de Imagem/T3/retina.jpg", 0)

einstein = cv2.imread("/content/drive/MyDrive/Processamento de Imagem/T4/ae.jpeg", 0)

Função de Convolução

Será utilizado para todos os exercícios

def convolucao(imagem, mascara):

  novaImagem = np.zeros((imagem.shape[0], imagem.shape[1]))

  x1 = mascara.shape[0]/2

  y1 = mascara.shape[1]/2

  for l in range (imagem.shape[0]):

    for c in range(imagem.shape[1]):
      soma = 0

      for i in range(-x1, x1+1):

        for j in range(-y1, y1+1):

          soma += mascara[i][j] * imagem[l-1][c-1]

      novaImagem = soma

  return novaImagem

Filtros Passa-Baixa

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 1/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

def media(imagem):

  return sum(imagem)/imagem.shape[0]

def mediana(imagem):

  return statistics.median(imagem)

def moda(imagem):

  return Counter(imagem).most_common(1)[0][0]

def minimo(imagem):

  return min(imagem)

def maximo(imagem):

  return max(imagem)

def gaussiana(imagem):

  mascaraB = [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 6, 24, 36, 24, 6, 4, 16, 24, 16, 4, 1, 4, 6
  mascaraB = np.array(mascaraB)

  return sum(imagem * mascaraB)/256

def passabaixa(imagem, func, filtro):

  novaImagem = imagem.copy()

  limite = filtro // 2

  for i in range (limite, imagem.shape[0]-limite):

    for j in range (limite, imagem.shape[1]- limite):

      novaImagem[i][j] = func(imagem[i-limite: i+limite+1, j-limite: j+limite+1].reshape(-
  return novaImagem

Aplicando Passa Baixa

sp_media = passabaixa(sp, media, 3)

sp_mediana = passabaixa(sp, mediana, 3)

sp_moda = passabaixa(sp, moda, 3)

sp_min = passabaixa(sp, minimo, 3)

sp_max = passabaixa(sp, maximo, 3)

sp_gauss = passabaixa(sp, gaussiana, 5)

g_media = passabaixa(gauss, media, 3)

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 2/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

g_mediana = passabaixa(gauss, mediana, 3)

g_moda = passabaixa(gauss, moda, 3)

g_min = passabaixa(gauss, minimo, 3)

g_max = passabaixa(gauss, maximo, 3)

g_gauss = passabaixa(gauss, gaussiana, 5)

p_media = passabaixa(poisson, media, 3)

p_mediana = passabaixa(poisson, mediana, 3)

p_moda = passabaixa(poisson, moda, 3)

p_min = passabaixa(poisson, minimo, 3)

p_max = passabaixa(poisson, maximo, 3)

p_gauss = passabaixa(poisson, gaussiana, 5)

Plotando as imagens

imagem, eixo = plt.subplots(3,7, figsize=(15,7))

eixo[0][0].imshow(sp, cmap='gray', vmin=0, vmax=255)
eixo[0][0].set_title("Salt and Pepper")

eixo[0][1].imshow(sp_media, cmap='gray')
eixo[0][1].set_title("Média")

eixo[0][2].imshow(sp_mediana, cmap='gray')
eixo[0][2].set_title("Mediana")

eixo[0][3].imshow(sp_moda, cmap='gray')
eixo[0][3].set_title("Moda")

eixo[0][4].imshow(sp_min, cmap='gray')
eixo[0][4].set_title("Min")

eixo[0][5].imshow(sp_max, cmap='gray')
eixo[0][5].set_title("Max")

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 3/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

eixo[0][6].imshow(sp_gauss, cmap='gray')
eixo[0][6].set_title("Gaussiana")

eixo[1][0].imshow(gauss, cmap='gray', vmin=0, vmax=255)
eixo[1][0].set_title("Ruído Gaussiano")

eixo[1][1].imshow(g_media, cmap='gray')
eixo[1][1].set_title("Média")

eixo[1][2].imshow(g_mediana, cmap='gray')
eixo[1][2].set_title("Mediana")

eixo[1][3].imshow(g_moda, cmap='gray')
eixo[1][3].set_title("Moda")

eixo[1][4].imshow(g_min, cmap='gray')
eixo[1][4].set_title("Min")

eixo[1][5].imshow(g_max, cmap='gray')
eixo[1][5].set_title("Max")

eixo[1][6].imshow(g_gauss, cmap='gray')
eixo[1][6].set_title("Gaussiana")

eixo[2][0].imshow(poisson, cmap='gray', vmin=0, vmax=255)
eixo[2][0].set_title("Ruído de Poisson")

eixo[2][1].imshow(p_media, cmap='gray', )
eixo[2][1].set_title("Média")

eixo[2][2].imshow(p_mediana, cmap='gray')
eixo[2][2].set_title("Mediana")

eixo[2][3].imshow(p_moda, cmap='gray')
eixo[2][3].set_title("Moda")

eixo[2][4].imshow(p_min, cmap='gray')
eixo[2][4].set_title("Min")

eixo[2][5].imshow(p_max, cmap='gray')
eixo[2][5].set_title("Max")

eixo[2][6].imshow(p_gauss, cmap='gray')
eixo[2][6].set_title("Gaussiana")

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 4/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

Text(0.5, 1.0, 'Gaussiana')

Filtragem de Preservação de Bordas

def preserv_Bordas(imagem):

  novaImagem = np.zeros((imagem.shape[0], imagem.shape[1]))

  soma = 0.0

  media = 0.0

  min = 100.0

  #Calcula a variância de cada mascara do conjunto de pixel

  for l in range (imagem.shape[0]):

    for c in range (imagem.shape[1]):

      aux = imagem[l][c]

      #k = 5

      for i in range (aux, aux+9):

        for j in range (aux, aux-9):

          soma += imagem[i][j]

          media = soma/i

          #Escolhe a mascara cuja variância pe minima

          if media < min : 

            min = media

      #imagem de saida recebe imagem[l][c] com a intensidade média escolhida

      novaImagem[l][c] = imagem[l][c]*min

  return novaImagem

retina_preserv = preserv_Bordas(retina)

imagem, eixo = plt.subplots(1,2, figsize=(15,7))

eixo[0].imshow(retina, cmap='gray', vmin=0, vmax=255)
eixo[0].set_title("Original")

eixo[1].imshow(retina_preserv, cmap='gray')
eixo[1].set_title("Bordas Preservadas")

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 5/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

Text(0.5, 1.0, 'Bordas Preservadas')

Técnica Meios-Tons Floyd e Steinberg

def meios_tons(imagem):

  novaImagem = imagem.copy()

  for x in range (imagem.shape[0]-1):

    for y in range (imagem.shape[1]-1):

      if(imagem[x][y] < 128):

        novaImagem[x][y] = 0

      else:

        novaImagem[x][y] = 1

      erro = imagem[x][y] - novaImagem[x][y] * 255

      novaImagem[x+1][y] = imagem[x+1][y] + (7/16) * erro

      novaImagem[x-1][y+1] = imagem[x-1][y+1] + (3/16) * erro

      novaImagem[x][y+1] = imagem[x][y+1] + (5/16) * erro

      novaImagem[x+1][y+1] = imagem[x+1][y+1] + (1/16) * erro

  return novaImagem

einstein_mt = meios_tons(einstein)

imagem, eixo = plt.subplots(1,2, figsize=(15,7))

eixo[0].imshow(einstein, cmap='gray', vmin=0, vmax=255)
eixo[0].set_title("Original")

eixo[1].imshow(einstein_mt, cmap='gray')
eixo[1].set_title("Einstein Meios-Tons")

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 6/7
17/10/2022 18:34 trabalho_pratico_4_LeticiaLisboa.ipynb - Colaboratory

Text(0.5, 1.0, 'Einstein Meios-Tons')

Produtos pagos do Colab


-
Cancelar contratos

check 0s conclusão: 18:34

https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 7/7

Você também pode gostar