Pergunta

Eu escrevi o meu próprio software em C # para a realização de imagens de microscopia. Veja este imagem .

As imagens que podem ser vistas não são da mesma amostra, mas gravadas por detectores fisicamente diferentes. Ele s crucial para meus experimentos que essas imagens seja exatamente alinhadas. Eu pensei que o mais fácil seria para misturar alguma forma / subtrair os dois bitmaps, mas isso não me dá bons resultados. Portanto, eu estou procurando uma maneira melhor de fazer isso.

Pode ser útil salientar que as imagens existem como matrizes de intensidades na memória e são convertidos em bitmaps para na tela de pintura para o meu auto controle de imagem escrita.

eu gostaria muito de receber qualquer ajuda!

Foi útil?

Solução 2

Eu fui em torno de resolver este há algum tempo ... Desde que eu só precisa verificar se duas imagens de dois detectores estão perfeitamente alinhados e desde que eu não tenho que tentar e alinhá-los se eles não são eu resolvi-lo assim:

1) Use o Aforge Framework e aplicar um filtro de tons de cinza para ambas as imagens. Este será, em média os valores RGB para cada pixel. 2) Em uma imagem aplicar uma ChannelFilter para reter apenas o canal vermelho. 3) Por outro imagem, aplicar uma ChannelFilter para reter apenas o canal verde. 4) Adicionar Ambas as imagens.

Aqui estão os filtros que usei, deixo para o leitor a aplicá-las, se necessário (é trivial e há exemplos no site Aforge).

AForge.Imaging.Filters.IFilter filterR = new AForge.Imaging.Filters.ChannelFiltering(new AForge.IntRange( 0, 255 ), new AForge.IntRange( 0, 0 ), new AForge.IntRange( 0, 0 ));
AForge.Imaging.Filters.IFilter filterG = new AForge.Imaging.Filters.ChannelFiltering(new AForge.IntRange( 0, 0 ), new AForge.IntRange( 0, 255 ), new AForge.IntRange( 0, 0 ));
AForge.Imaging.Filters.GrayscaleRMY FilterGray= new AForge.Imaging.Filters.GrayscaleRMY();
AForge.Imaging.Filters.Add filterADD = new AForge.Imaging.Filters.Add();

Quando características significativas estão presentes em ambas as imagens Quero verificar, eles vão aparecer em amarelo assim fazendo exatamente o que eu preciso.

Obrigado por todas as entradas!

Outras dicas

Se as imagens são a mesma orientação e mesmo tamanho, mas um pouco deslocado verticalmente ou horizontalmente, você pode usar correlação cruzada para encontrar o melhor alinhamento?

Se você sabe que as características da necessidade canal amarelo para alinhar, por exemplo, apenas alimentar os canais amarelo no algoritmo de correlação cruzada, e em seguida, encontrar o pico no resultado. O pico ocorrerá no deslocamento onde as duas imagens se alinham melhor.

Ele vai trabalhar mesmo com imagens ruidosas, e eu suspeito que ele vai trabalhar mesmo para imagens que são significativamente diferentes, como em sua imagem.

MATLAB exemplo: Registrando uma imagem usando Normalizada Cross-Correlation

Wikipedia chama isso de " fase correlação " e também descreve tornando-Scale e rotação invariante :

O método pode ser estendido para determinar as diferenças de rotação e de escala entre duas imagens convertendo em primeiro lugar as imagens para coordenadas polares log. Devido às propriedades da transformada de Fourier, os parâmetros de rotação e de escalonamento pode ser determinado de um modo invariável a tradução.

Assim, os detectores são diferentes, então o alinhamento será um pouco errado, em que pixel (256,512) na imagem 1 poderia ser um recurso representado por pixel (257,513) na imagem 2. É esse o problema? E sobre a ampliação? Se o detector é diferente, não poderia a ampliação ser ligeiramente diferente também?

Se você quer dizer algo como o acima, e a julgar por sua imagem, ele não deve ser muito difícil encontrar os centros das 4 ou 5 áreas de maior intensidade - normalizar os dados e passar por toda a imagem procurando blocos de 9 pixels vizinhos com maior intensidade média. Observe o pixel central de quatro ou cinco desses recursos para cada imagem. Em seguida, calcular a distância entre cada conjunto de pixels entre as duas imagens.

Se a distância é de 0 para todos os conjuntos, as duas imagens devem estar em alinhamento. Se a distância é constante, tudo que você tem a fazer é mover uma imagem que distância. Se a distância varia, você terá que redimensionar uma imagem até que seja constante, e, em seguida, deslize-o para igualar-se as características. Então você pode calcular a média dos valores de intensidade das duas imagens, uma vez que eles devem estar em alinhamento.

É assim que eu iria começar, de qualquer maneira.

Se as imagens são geradas a partir de sensores diferentes, então o problema vai ser difícil, em geral. Especialmente para você desde que uma das suas imagens parece ter um monte de ruído.

Assumindo que não há nenhuma deformação ou de rotação em que ele sensores, então eu sugiro que você primeiro normalizar a intensidade de cada imagem. Em seguida, localize a mudança que minimiza o erro entre as imagens. O erro pode ser euclidiana (isto é, a soma total das diferenças ao quadrado de cada pixel). Isso, para mim, pelo menos, é a definição de alinhamento.

A única maneira você pode alinhar é se há alguma característica nas imagens que é conhecido por ser idêntico (ou com uma transformação conhecida). Uma abordagem comum é colocar algo na imagem - por exemplo, têm a captura de imagem adicionar um artefato alinhamento -. Algo fácil de detectar e descobrir a transformação necessária para normalizar a imagem

Um exemplo comum é colocar + marcadores nos cantos. Você também pode ver os códigos de barras utilizados para este fim, por vezes.

Sem esse artefato, tem que haver algo na imagem cujo tamanho ea orientação é conhecido (e que existe em ambas as imagens).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top