Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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
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
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
https://colab.research.google.com/drive/1RMS9km8IykA-PhNmZJMY9H82xhI82IDL#scrollTo=5Hg4MoWndGKY&printMode=true 7/7