Пример #1
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = int(255 * .50)
        if imagem.get_tipo() == 'P3':
            imagem = self.get_processamentos().get_escala_cinza().processar(
                imagem)

        pixels = imagem.get_pixels()
        for i in range(len(pixels)):
            p = pixels[i]
            if p > params:
                pixels[i] = 1
            else:
                pixels[i] = 0

        return converter_pbm(imagem)
Пример #2
0
def processar_unico(imagem: Imagem, indice: int, func, params=None):
    """
    :param func: function(pixel: int or int[], params?)
    """
    if not callable(func):
        raise Exception()

    p = imagem.get_pixels()[indice]
    if imagem.get_tipo() == 'P3':
        if params is not None:
            return [func(p[0], params), func(p[1], params), func(p[2], params)]
        else:
            return [func(p[0]), func(p[1]), func(p[2])]
    else:
        if params is not None:
            return func(p, params)
        else:
            return func(p)
Пример #3
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        imagem_original = imagem
        imagem_dilatacao = self.get_processamentos().get_dilatacao().processar(
            imagem.clonar(), params)

        pixels_original = imagem_original.get_pixels()
        pixels_dilatacao = imagem_dilatacao.get_pixels()

        for i in range(len(pixels_original)):
            pixels_original[i] = (pixels_original[i] - pixels_dilatacao[i]) % 2
        return imagem
Пример #4
0
    def open_file(self):
        file_name, _ = QtWidgets.QFileDialog.getOpenFileName(
            self,
            caption="Abrir Imagem",
            directory=QtCore.QDir.currentPath(),
            filter='Imagens(*.ppm; *.pgm; *.pbm)',
            initialFilter='Imagens(*.ppm; *.pgm; *.pbm)')
        if file_name != '':
            print('Abrindo imagem...')
            self.texto_progresso.setText('Abrindo imagem...')

            self.barra_progresso.setValue(0)
            self.imagem_original = Imagem()
            sucesso = self.imagem_original.carregar(file_name)

            if not sucesso:
                self.exibir_erro(self.imagem_alterada.get_erro())
                self.barra_progresso.setValue(100)
                self.barra_status.showMessage(
                    "Não foi possível abrir a imagem.", 5000)
                print('Abrir imagem -> FALHA')
                return

            print('Abrir imagem -> 50%')

            self.barra_progresso.setValue(50)
            self.imagem_alterada = self.imagem_original.clonar()
            print('Abrir imagem -> 80%')

            self.barra_progresso.setValue(80)
            pixmap = QtGui.QPixmap(file_name)
            pixmap = pixmap.scaled(250, 250, QtCore.Qt.KeepAspectRatio)
            self.imagem_1.setPixmap(pixmap)
            self.imagem_2.setPixmap(pixmap)
            print('Abrir imagem -> 100%')

            self.barra_progresso.setValue(100)
            self.barra_status.showMessage("Imagem aberta com sucesso.", 5000)
            print('Abrir imagem -> COMPLETO')

        self.atualizar_menus()
Пример #5
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if imagem.get_tipo() != 'P3':
            imagem = converter_ppm(imagem)

        # Azul
        if params == 'b':
            indice = 2
        # Verde
        elif params == 'g':
            indice = 1
        # Vermelho
        else:
            indice = 0

        pixels = imagem.get_pixels()
        for i in range(len(pixels)):
            p = pixels[i]
            novo_pixel = np.zeros(len(p))
            novo_pixel[indice] = p[indice]
            pixels[i] = novo_pixel
        return imagem
Пример #6
0
def processar_independente(imagem: Imagem, func, params=None):
    """
    :param func: function(pixel: int or int[], params?)
    """
    if not callable(func):
        raise Exception()

    if imagem.get_tipo() == 'P3':
        if params is not None:
            return np.array(
                [[func(p[0], params),
                  func(p[1], params),
                  func(p[2], params)] for p in imagem.get_pixels()])
        else:
            return np.array([[func(p[0]), func(p[1]),
                              func(p[2])] for p in imagem.get_pixels()])
    else:
        if params is not None:
            return np.array([func(p, params) for p in imagem.get_pixels()])
        else:
            return np.array([func(p) for p in imagem.get_pixels()])
Пример #7
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        estruturante = self.get_estruturante(params)
        pixel = int((len(estruturante) - 1) / 2)

        pixels = imagem.get_pixels()
        pixels = np.reshape(pixels,
                            (imagem.get_altura(), imagem.get_largura()))
        novos_pixels = pixels.copy()
        for i in range(pixel, imagem.get_altura() - pixel):
            for j in range(pixel, imagem.get_largura() - pixel):
                for x in range(len(estruturante)):
                    for y in range(len(estruturante[1])):
                        if pixels[i][j] == 0 and estruturante[x][y] == 1:
                            novos_pixels[i - pixel + x][j - pixel + y] = 0

        novos_pixels = np.reshape(novos_pixels, len(imagem.get_pixels()))
        imagem.set_pixels(novos_pixels)
        return imagem
Пример #8
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        elemento = self.get_elemento(params)
        es = int((len(elemento) - 1) / 2)

        pixels = imagem.get_pixels()
        pixels = np.reshape(pixels,
                            (imagem.get_altura(), imagem.get_largura()))
        novos_pixels = pixels.copy()
        for px in range(es, imagem.get_altura() - es):
            for py in range(es, imagem.get_largura() - es):
                if pixels[px][py] == 1:
                    for ex in range(len(elemento)):
                        for ey in range(len(elemento[1])):
                            if elemento[ex][ey] == 1:
                                novos_pixels[px - es + ex][py - es + ey] = 1

        novos_pixels = np.reshape(novos_pixels, len(imagem.get_pixels()))
        imagem.set_pixels(novos_pixels)
        return imagem
Пример #9
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 0

        indice = params
        pixels = imagem.get_pixels()
        novos_pixels = []

        largura = imagem.get_largura()
        altura = imagem.get_altura()

        if indice == 0:  # Vertical
            for i in range(largura - 1, -1, -1):
                for j in range(0, altura):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        else:  # Horizontal
            for i in range(0, largura):
                for j in range(altura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])

        imagem.set_pixels(np.array(novos_pixels))
        return imagem
Пример #10
0
 def processar(self, imagem: Imagem, params=None) -> Imagem:
     maxval = imagem.get_maxval()
     imagem.set_pixels(processar_independente(imagem, lambda p: maxval - p))
     return imagem
Пример #11
0
 def processar_clone(self, imagem: Imagem, params=None) -> Imagem:
     clone = imagem.clonar()
     self.processar(clone, params)
     return clone
Пример #12
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 0
        if imagem.get_tipo() == 'P3':
            imagem = self.get_processamentos().get_escala_cinza().processar(
                imagem)

        # Cores pre-definidas
        cores = [[[45, 165, 195], [149, 248, 63], [209, 206, 54],
                  [95, 15, 191]],
                 [[127, 219, 218], [173, 228, 152], [237, 230, 130],
                  [254, 191, 99]],
                 [[0, 0, 92], [106, 9, 125], [192, 96, 161], [255, 220, 180]],
                 [[235, 236, 241], [32, 106, 93], [31, 64, 104], [27, 28, 37]]]
        random.shuffle(cores)

        # Colorir imagem
        pixels_coloridos = []
        for i in range(len(cores)):
            pixels_coloridos.append(
                self._processar_parcial(imagem, cores[i], params == 1
                                        and i >= len(cores) / 2))
        # Montar imagem
        meia_largura = imagem.get_largura()
        meia_altura = imagem.get_altura()
        largura = imagem.get_largura() * 2
        altura = imagem.get_altura() * 2

        novos_pixels = []
        for i in range(largura):
            for j in range(altura):
                indice_pixels_coloridos = int(j / meia_largura) * 2 + int(
                    i / meia_largura)
                x = i % meia_largura
                y = j % meia_altura
                indice = x * meia_largura + y

                novos_pixels.append(
                    pixels_coloridos[indice_pixels_coloridos][indice])

        imagem.set_largura(largura)
        imagem.set_altura(altura)
        imagem.set_tipo('P3')
        imagem.set_pixels(np.array(novos_pixels))
        return imagem
Пример #13
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 90

        indice = int((params % 360) / 90)
        pixels = imagem.get_pixels()
        novos_pixels = []

        if indice % 2 == 1:
            aux = imagem.get_largura()
            imagem.set_largura(imagem.get_altura())
            imagem.set_altura(aux)

        largura = imagem.get_largura()
        altura = imagem.get_altura()

        if indice == 1:  # 90
            for j in range(0, altura):
                for i in range(largura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        elif indice == 2:  # 180
            for i in range(largura - 1, -1, -1):
                for j in range(altura - 1, -1, -1):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])
        elif indice == 3:  # 270
            for j in range(altura - 1, -1, -1):
                for i in range(0, largura):
                    novos_pixels.append(pixels[imagem.get_pixel_index(i, j)])

        imagem.set_pixels(np.array(novos_pixels))
        return imagem
Пример #14
0
 def processar(self, imagem: Imagem, params=None) -> Imagem:
     maxval = imagem.get_maxval()
     imagem.set_pixels(
         processar_independente(
             imagem, lambda p: int((math.log(1 + (p / maxval))) * maxval)))
     return imagem
Пример #15
0
class MyWindow(QMainWindow):
    # Constantes
    LARGURA = 640
    ALTURA = 480
    CAMINHO_TEMP = '.temp'

    def __init__(self):
        super(MyWindow, self).__init__()

        # Definir propriedades
        self.layout = None
        self.barra_progresso = None
        self.barra_status = None
        self.imagem_1 = None
        self.imagem_2 = None
        self.texto_progresso = None

        self.menu_salvar_arquivo = None
        self.menu_sobre_imagem = None
        self.menu_resetar_imagem = None
        self.menus_processamentos = []

        self.processamentos = Processamentos()
        self.imagem_original = None
        self.imagem_alterada = None

        # Montar interface
        self.setup_main_window()
        self.init_ui()
        self.atualizar_menus()

    def setup_main_window(self):
        # Definir formato
        self.setMinimumSize(QSize(MyWindow.LARGURA, MyWindow.ALTURA))
        self.setWindowTitle("Processamento Digital de Imagens - IFTM")

        # Definir layout
        widget = QWidget(self)
        self.setCentralWidget(widget)
        self.layout = QGridLayout()
        widget.setLayout(self.layout)

    def init_ui(self):
        # Criar a barra de menu
        barra_menu = self.menuBar()

        # Criar o menu arquivo
        menu_arquivo = barra_menu.addMenu("&Arquivo")

        opcao_abrir = menu_arquivo.addAction("A&brir")
        opcao_abrir.triggered.connect(self.open_file)
        opcao_abrir.setShortcut("Ctrl+A")

        self.menu_salvar_arquivo = menu_arquivo.addAction("S&alvar como")
        self.menu_salvar_arquivo.triggered.connect(self.save_file)
        self.menu_salvar_arquivo.setShortcut("Ctrl+S")

        menu_arquivo.addSeparator()

        opcao_fechar = menu_arquivo.addAction("F&echar")
        opcao_fechar.triggered.connect(self.close)
        opcao_fechar.setShortcut("Ctrl+X")

        # Criar o menu transformacoes
        menu_transformacoes = barra_menu.addMenu("&Transformações")
        self.menu_resetar_imagem = menu_transformacoes.addAction(
            "Resetar Imagem")
        self.menu_resetar_imagem.triggered.connect(self.resetar_imagem)

        menu_transformacoes.addSeparator()

        for processamento in self.processamentos.get_todos():
            if processamento.get_default_params() is not None:
                menu = menu_transformacoes.addMenu(processamento.get_nome())

                # Definir sub menus
                for (param_name,
                     param_value) in processamento.get_default_params():
                    submenu = menu.addAction(param_name)

                    # Definir a acao em outro escopo para manter o valor da variavel processamento
                    submenu.triggered.connect(
                        self._get_processamento_acao(processamento,
                                                     param_value))
            else:
                menu = menu_transformacoes.addAction(processamento.get_nome())

                # Definir a acao em outro escopo para manter o valor da variavel processamento
                menu.triggered.connect(
                    self._get_processamento_acao(processamento))

            # Adicionar tooltip, se presente
            if len(processamento.get_descricao()) > 0:
                menu.setToolTip(processamento.get_descricao())

            # Guardar na lista de acoes de processamentos
            menu.setEnabled(False)
            self.menus_processamentos.append((processamento, menu))

        # Criar o menu sobre
        menu_sobre = barra_menu.addMenu("&Sobre")
        opcao_sobre = menu_sobre.addAction("Sobre o Aplicativo")
        opcao_sobre.triggered.connect(self.exibir_sobre_aplicativo)

        self.menu_sobre_imagem = menu_sobre.addAction("Sobre a Imagem")
        self.menu_sobre_imagem.triggered.connect(self.exibir_sobre_imagem)

        # Criar barra de status
        self.barra_status = self.statusBar()
        self.barra_status.showMessage("Seja bem-vindo", 3000)

        # Criando a barra de progresso
        self.barra_progresso = QProgressBar(self)
        self.barra_progresso.setAlignment(QtCore.Qt.AlignCenter)
        self.barra_progresso.move(0, 100)

        # Criar os widgets (Label, Text, Image)

        # Criando um QLabel para texto
        texto = QLabel("Trabalho Final", self)
        texto.adjustSize()
        texto.setAlignment(QtCore.Qt.AlignCenter)

        # Criando um QLabel para informar que há uma barra de progresso
        self.texto_progresso = QLabel("Carregando...")

        # Criando uma imagem(QLabel)
        self.imagem_1 = QLabel(self)
        self.imagem_1.setAlignment(QtCore.Qt.AlignCenter)

        self.imagem_2 = QLabel(self)
        self.imagem_2.setAlignment(QtCore.Qt.AlignCenter)

        # Organizando os widgets dentro do GridLayout
        self.layout.addWidget(texto, 0, 0, 1, 4)
        self.layout.addWidget(self.imagem_1, 1, 0, 2, 2)
        self.layout.addWidget(self.imagem_2, 1, 2, 2, 2)
        self.layout.addWidget(self.texto_progresso, 2, 0)
        self.layout.addWidget(self.barra_progresso, 3, 0, 1, 4)

        # Definindo a largura das linhas
        self.layout.setRowStretch(0, 0)
        self.layout.setRowStretch(1, 1)
        self.layout.setRowStretch(2, 0)
        self.layout.setRowStretch(3, 1)

    def exibir_sobre_aplicativo(self):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setWindowTitle("Sobre")
        msg.setText(SOBRE_NOME_AUTOR)
        msg.setInformativeText(
            "Localização: %s\nData: %s\nLink Apresentação: %s" %
            (SOBRE_CIDADE, SOBRE_DATA, SOBRE_LINK_VIDEO))
        msg.exec_()  # exibir a caixa de mensagem/diálogo

    def exibir_sobre_imagem(self):
        imagem = self.imagem_original
        comentarios = ''
        if len(imagem.get_comentario()) > 0:
            comentarios = '\nComentario nos detalhes.'

        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setWindowTitle("Sobre")
        msg.setText(imagem.get_caminho())
        msg.setInformativeText(
            "Tipo: %s\nTamanho: %dx%d\nPrecisão: %d%s" %
            (imagem.get_tipo(), imagem.get_largura(), imagem.get_altura(),
             imagem.get_maxval(), comentarios))
        if len(comentarios) > 0:
            msg.setDetailedText(imagem.get_comentario())
        msg.exec_()  # exibir a caixa de mensagem/diálogo

    def exibir_erro(self, texto: str):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Abort)
        msg.setWindowTitle("Erro")
        msg.setText(texto)
        msg.exec_()  # exibir a caixa de mensagem/diálogo

    def open_file(self):
        file_name, _ = QtWidgets.QFileDialog.getOpenFileName(
            self,
            caption="Abrir Imagem",
            directory=QtCore.QDir.currentPath(),
            filter='Imagens(*.ppm; *.pgm; *.pbm)',
            initialFilter='Imagens(*.ppm; *.pgm; *.pbm)')
        if file_name != '':
            print('Abrindo imagem...')
            self.texto_progresso.setText('Abrindo imagem...')

            self.barra_progresso.setValue(0)
            self.imagem_original = Imagem()
            sucesso = self.imagem_original.carregar(file_name)

            if not sucesso:
                self.exibir_erro(self.imagem_alterada.get_erro())
                self.barra_progresso.setValue(100)
                self.barra_status.showMessage(
                    "Não foi possível abrir a imagem.", 5000)
                print('Abrir imagem -> FALHA')
                return

            print('Abrir imagem -> 50%')

            self.barra_progresso.setValue(50)
            self.imagem_alterada = self.imagem_original.clonar()
            print('Abrir imagem -> 80%')

            self.barra_progresso.setValue(80)
            pixmap = QtGui.QPixmap(file_name)
            pixmap = pixmap.scaled(250, 250, QtCore.Qt.KeepAspectRatio)
            self.imagem_1.setPixmap(pixmap)
            self.imagem_2.setPixmap(pixmap)
            print('Abrir imagem -> 100%')

            self.barra_progresso.setValue(100)
            self.barra_status.showMessage("Imagem aberta com sucesso.", 5000)
            print('Abrir imagem -> COMPLETO')

        self.atualizar_menus()

    def save_file(self):
        imagem = self.imagem_alterada
        file_name, _ = QtWidgets.QFileDialog.getSaveFileName(
            self,
            caption="Salvar Imagem",
            directory=QtCore.QDir.currentPath(),
            filter='%s (%s)' % (imagem.get_tipo(), imagem.get_extensao()))
        if file_name != '':
            print('Salvando imagem...')
            self.texto_progresso.setText('Salvando imagem...')

            self.barra_progresso.setValue(0)
            sucesso = self.imagem_alterada.salvar(file_name)

            if not sucesso:
                self.exibir_erro(self.imagem_alterada.get_erro())
                self.barra_progresso.setValue(100)
                self.barra_status.showMessage(
                    "Não foi possível salvar a imagem.", 5000)
                print('Salvar imagem -> FALHA')
                return

            print('Salvar imagem -> 100%')

            self.barra_progresso.setValue(100)
            self.barra_status.showMessage("Imagem salva com sucesso.", 5000)
            print('Salvar imagem -> COMPLETO')

    def resetar_imagem(self):
        print('Resetando imagem...')
        self.texto_progresso.setText('Resetando imagem...')

        self.barra_progresso.setValue(0)
        self.imagem_alterada = self.imagem_original.clonar()
        print('Resetar imagem -> 80%')

        self.barra_progresso.setValue(80)
        pixmap = QtGui.QPixmap(self.imagem_alterada.get_caminho())
        pixmap = pixmap.scaled(250, 250, QtCore.Qt.KeepAspectRatio)
        self.imagem_2.setPixmap(pixmap)
        print('Resetar imagem -> 100%')

        self.barra_progresso.setValue(100)
        self.barra_status.showMessage("Imagem resetada.", 5000)
        self.atualizar_menus()
        print('Resetar imagem -> COMPLETO')

    def transform_me(self, processamento: Processamento, param_value: any):
        print('Processando:', processamento.get_nome(), '(', param_value,
              ')...')
        self.texto_progresso.setText('Processando imagem...')

        self.barra_progresso.setValue(0)
        self.imagem_alterada = processamento.processar(self.imagem_alterada,
                                                       param_value)
        print('Processamento -> 40%')

        self.barra_progresso.setValue(40)
        self.imagem_alterada.salvar(MyWindow.CAMINHO_TEMP)
        time.sleep(.1)
        print('Processamento -> 80%')

        self.barra_progresso.setValue(80)
        pixmap = QtGui.QPixmap(self.imagem_alterada.get_caminho())
        pixmap = pixmap.scaled(250, 250, QtCore.Qt.KeepAspectRatio)
        self.imagem_2.setPixmap(pixmap)
        print('Processamento -> 100%')

        self.barra_progresso.setValue(100)
        self.barra_status.showMessage(
            processamento.get_nome() + " finalizado.", 5000)
        self.atualizar_menus()
        print('Processamento -> COMPLETO')

    def atualizar_menus(self):
        if self.imagem_alterada is None:
            tem_imagem = False
            imagem_binaria = False
            imagem_nao_binaria = False
        else:
            tem_imagem = True
            imagem_binaria = self.imagem_alterada.get_binario()
            imagem_nao_binaria = not imagem_binaria

        self.menu_salvar_arquivo.setEnabled(tem_imagem)
        self.menu_sobre_imagem.setEnabled(tem_imagem)
        self.menu_resetar_imagem.setEnabled(tem_imagem)

        for (processamento, menu) in self.menus_processamentos:
            ativo = (imagem_binaria and processamento.get_permitir_binarias()
                     ) or (imagem_nao_binaria
                           and processamento.get_permitir_nao_binarias())
            menu.setEnabled(ativo)

    def _get_processamento_acao(self,
                                processamento: Processamento,
                                param_value: any = None):
        return lambda: self.transform_me(processamento, param_value)
Пример #16
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        kernel = self.get_kernel(params)
        ks = int((len(kernel) - 1) / 2)

        largura = imagem.get_largura()
        altura = imagem.get_altura()
        novos_pixels = []

        if imagem.get_tipo() == 'P3':
            pixels = np.reshape(imagem.get_pixels(), (altura, largura, 3))
            for x in range(ks, altura - ks):
                for y in range(ks, largura - ks):
                    sum = [0, 0, 0]
                    for k in range(3):
                        for ki in range(len(kernel)):
                            for kj in range(len(kernel[1])):
                                sum[k] = sum[k] + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernel[ki][kj])
                        sum[k] = int(sum[k])
                    novos_pixels.append(np.array(sum))
        else:
            pixels = np.reshape(imagem.get_pixels(), (altura, largura))
            for x in range(ks, altura - ks):
                for y in range(ks, largura - ks):
                    sum = 0
                    for ki in range(len(kernel)):
                        for kj in range(len(kernel[1])):
                            sum = sum + (pixels[x - ks + ki][y - ks + kj] *
                                         kernel[ki][kj])
                    sum = int(sum)
                    novos_pixels.append(sum)

        imagem.set_pixels(np.array(novos_pixels))
        imagem.set_largura(largura - (2 * ks))
        imagem.set_altura(altura - (2 * ks))
        return imagem
Пример #17
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if imagem.get_tipo() == 'P2':
            return imagem

        return converter_pgm(imagem)
Пример #18
0
    def processar(self, imagem: Imagem, params=None) -> Imagem:
        if params is None:
            params = 64

        kernelx = [[-1, 0, 1], [2, 0, -2], [1, 0, -1]]
        kernelx = np.asarray(kernelx)
        kernely = [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]
        kernely = np.asarray(kernely)
        ks = int((len(kernelx) - 1) / 2)

        largura = imagem.get_largura()
        altura = imagem.get_altura()
        novos_pixels = []

        if imagem.get_tipo() == 'P3':
            pixels = np.reshape(imagem.get_pixels(), (altura, largura, 3))
            for x in range(ks, largura - ks):
                for y in range(ks, altura - ks):
                    sum = [0, 0, 0]
                    for k in range(3):
                        sumx = 0
                        sumy = 0
                        for ki in range(len(kernelx)):
                            for kj in range(len(kernelx[1])):
                                sumx = sumx + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernelx[ki][kj])
                                sumy = sumy + (
                                    pixels[x - ks + ki][y - ks + kj][k] *
                                    kernely[ki][kj])
                        sumxy = math.sqrt((sumx**2) + (sumy**2))
                        sum[k] = max(sumxy, params)
                        sum[k] = int(sum[k]) if sum[k] != params else 0
                    novos_pixels.append(sum)
        else:
            pixels = np.reshape(imagem.get_pixels(), (altura, largura))
            for x in range(ks, largura - ks):
                for y in range(ks, altura - ks):
                    sumx = 0
                    sumy = 0
                    for ki in range(len(kernelx)):
                        for kj in range(len(kernelx[1])):
                            sumx = sumx + (pixels[x - ks + ki][y - ks + kj] *
                                           kernelx[ki][kj])
                            sumy = sumy + (pixels[x - ks + ki][y - ks + kj] *
                                           kernely[ki][kj])
                    sumxy = math.sqrt((sumx**2) + (sumy**2))
                    sum = max(sumxy, params)
                    sum = int(sum) if sum != params else 0
                    novos_pixels.append(sum)

        imagem.set_pixels(np.array(novos_pixels))
        imagem.set_largura(largura - 2 * ks)
        imagem.set_altura(altura - 2 * ks)
        return imagem