Eu tenho um problema semelhante em formulação a este post, com algumas diferenças notáveis:
Quais métodos simples existem para amostrar adaptativamente uma função 2D?
Como nesse post:
- Eu tenho um e a avaliação dessa função é um pouco cara de calcular
Ao contrário desse post:
Não estou interessado no valor da função com precisão em todos os lugares, mas apenas em encontrar um único isocontorno da função.
Eu posso fazer afirmações significativas sobre a autocorrelação da função e, conseqüentemente, a escala da suavidade.
Existe uma maneira inteligente de avançar / provar esta função e encontrar esse contorno?
Mais Informações
A função é o cálculo dos Recursos Haralick sobre pixels ao redor do ponto e a classificação suave por algum tipo de classificador / regressor. A saída disso é um número de ponto flutuante que indica a qual textura / material o ponto pertence. A escala desse número pode ser estimada como probabilidades de classe (SoftSVM ou métodos estatísticos, etc.) ou algo realmente simples como a saída de uma regressão linear / logística. A classificação / regressão é precisa e barata em comparação com o tempo necessário para a extração de recursos da imagem.
As estatísticas em torno de significam que a janela está tipicamente amostrando regiões sobrepostas e, como tal, existe uma correlação significativa entre amostras próximas. (Algo que eu possa abordar numericamente / simbolicamente). Consequentemente, isso pode ser pensado como uma função mais complexa de que maior fornecerá uma estimativa mais relacionada à vizinhança (altamente correlacionada) e uma menor fornecerá uma estimativa mais variável, mas mais local. f ( x , y , N ) N N
Coisas que tentei:
Computação Bruta - Funciona bem. 95% de segmentação correta com constante . Os resultados parecem fantásticos quando contornados usando qualquer método padrão depois disso. Isso leva uma eternidade . Posso simplificar os recursos calculados por amostra, mas, idealmente, quero evitar isso para manter esse código geral para imagens com texturas cujas diferenças apareçam em diferentes partes do espaço de recursos.
Mudança de posição - Dê um "passo" de pixel único em cada direção e escolha a direção para mover com base na proximidade do valor iso-line. Ainda bem lento e ignorará a bifurcação de uma isolina. Além disso, em áreas com um gradiente plano, ele "vagará" ou voltará a si próprio.
Eu estou pensando que eu quero fazer algo como a subdivisão proposta no primeiro link, mas podada por caixas que vinculam a isolinha de interesse. Sinto que também devo aproveitar , mas não sei como abordar isso.
fonte
Respostas:
Existe um trabalho em computação gráfica chamado Provably Good Sampling and Meshing of Surface , que conta com o fornecimento de um oráculo que determina todas as interseções de uma isolina com um determinado segmento de linha. Com isso, ele mostra todos os contornos, supondo que você possa fornecer uma escala de recurso local (algo como a curvatura local máxima) e um conjunto inicial de segmentos de linha que cruzam todos os contornos. Não é a coisa mais simples de implementar, pois depende da computação das triangulações de Delaunay, mas é implementada em 3D na CGAL . É substancialmente mais simples em 2D, pois existe um bom software de triangulação como o Triangle . Em certo sentido, isso é bem próximo do melhor que você pode fazer.
fonte
Você pode tentar aplicar os principais recursos do método Efficient Global Reliability Analysis (EGRA). Esse método foi derivado para o cálculo eficiente de uma probabilidade de falha, mas sua essência está focada em fazer o que você descreve - criando um modelo que é preciso apenas perto de um contorno específico de interesse.
Esse pode ser um ponto de partida interessante, mas não tenho certeza de que resolverá o seu problema. Depende muito da forma da sua função. Se é algo que pode ser bem aproximado com um modelo de krigagem , deve ter um bom desempenho. Esses modelos são bastante flexíveis, mas geralmente precisam de uma função subjacente suave. Eu tentei aplicar o EGRA a um aplicativo de segmentação de imagens no passado, mas teve pouco sucesso porque simplesmente não faz sentido ajustar um modelo substituto a algo que não é realmente definido por um relacionamento funcional. Ainda assim, eu o mencionei como algo que você pode querer analisar caso seu aplicativo seja diferente do que estou imaginando.
Se ainda não o convenci, você pode ler mais sobre o EGRA aqui (link em PDF) e aqui , e existe uma implementação existente no projeto DAKOTA de Sandia - que eu saiba, a única implementação de código aberto disponível para o EGRA.
fonte