AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79474571
Accepted
Peter Wu
Peter Wu
Asked: 2025-02-28 13:16:59 +0800 CST2025-02-28 13:16:59 +0800 CST 2025-02-28 13:16:59 +0800 CST

Estrutura de dados que garante que um conjunto variável de pixels esteja conectado

  • 772

Estou trabalhando em um problema de otimização para encontrar uma região que maximize uma certa função objetivo, estou usando um conjunto de coordenadas de pixel para manter o controle da região, e para cada passo adicionarei ou removerei um pixel no limite para ver se a função objetivo aumenta ou não. Espero que a região seja conectada, há alguma estrutura de dados que possa decidir rapidamente se remover um pixel tornaria a região desconectada? Aqui, assumimos que um pixel está conectado a seus quatro vizinhos.

E uma pergunta paralela: e se eu esperar que a região seja sempre simplesmente conectada? Por simplesmente conectada, quero dizer que não há buraco, e adicionar um pixel pode criar um buraco.

algorithm
  • 1 1 respostas
  • 38 Views

1 respostas

  • Voted
  1. Best Answer
    Cris Luengo
    2025-02-28T14:34:06+08:002025-02-28T14:34:06+08:00

    Você pode olhar para a configuração de uma vizinhança 3x3 antes e depois de remover um pixel (ou adicionar um pixel) e decidir se essa ação mudará a característica de Euler do objeto ao qual está conectado. A característica de Euler informa quantos objetos e quantos buracos existem.

    Se houver entre 1 e 7 pixels definidos na vizinhança 3x3, excluindo o pixel central, e eles estiverem simplesmente conectados, adicionar ou remover esse pixel central não alterará a característica de Euler (ou seja, não adicionará/removerá um buraco ou adicionará/removerá um objeto), assumindo um objeto com 8 conexões (para um objeto com 4 conexões, há menos configurações para as quais isso é verdade, é fácil resolvê-las).

    Normalmente, você teria uma tabela com as 256 configurações possíveis desses 8 pixels, você codifica a configuração como um índice na tabela (por exemplo, indo no sentido horário começando no pixel superior esquerdo, lendo os pixels como um número binário de 8 dígitos). Então é muito rápido verificar se você pode remover (ou adicionar) um pixel em um determinado local.

    Procure uma implementação padrão do algoritmo de esqueletização ou do afinamento morfológico. Essas duas operações realizam exatamente essa mesma verificação em cada pixel antes de removê-lo, ambas precisam preservar a característica de Euler. Por exemplo, veja esta tabela em scikit-image .

    • 4

relate perguntas

  • Encontre o menor número inteiro positivo, que não divide nenhuma diferença mútua de inteiros em uma matriz

  • O último dígito de um grande número de casos de teste falha em Golang Codewars

  • Escreva um programa LMC que calcule a soma dos números inseridos pelo usuário. Exibir soma antes de parar

  • Como determinar os estados alcançáveis ​​no problema de 3 jarras de água?

  • Encontre o número de pares de números naturais de l a r que bit a bit AND é igual a 0

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve