O sequenciamento de DNA da Sanger produz um traço de cromatograma que pode ser visualizado com vários programas, incluindo FinchTV ou ChromasLite. Os dados brutos consistem em coordenadas para cada uma das quatro bases de DNA (A, C, G e T). No entanto, os gráficos são exibidos como picos suavizados, conforme mostrado na imagem anteriormente. Muitos programas permitem que os eixos x e y da plotagem sejam redimensionados em tamanho maior ou menor para alterar a forma da plotagem. Que método matemático é usado para plotar curvas suaves como essas de um número (pequeno) de pontos de dados brutos?
image-processing
discrete-signals
interpolation
SabreWolfy
fonte
fonte
Respostas:
Implementação
Supondo que você já tenha uma rotina de desenho de linha, basta suplementar isso com algum tipo de interpolação. As curvas são criadas desenhando linhas curtas interpoladas suficientes para tornar o resultado mais suave. Um bom ponto de partida seria usar uma rotina de interpolação existente, como as fornecidas por Paul Bourke aqui .
Ilustrarei isso usando as rotinas cúbicas que ele fornece, pois essas são algumas das mais simples que ainda fornecerão resultados razoáveis. Aqui está o primeiro (traduzido para python) para referência:
Cada rotina possui um parâmetro
mu
que representa a parte fracionária do índice que você deseja interpolar. Dependendo da rotina, os outros parâmetros serão um número de amostras em torno do índice em questão. No caso cúbico, você precisará de quatro amostras. Por exemplo, se seus dados estãoy[n]
, e você quer o valor em10.3
,mu
seria.3
, e você passar emy[9]
,y[10]
,y[11]
, ey[12]
.Em vez de desenhar uma única linha com pontos finais, digamos,( 10 ,y10) → ( 11 ,y11) , você desenharia vários mais curtos usando os valores interpolados (por exemplo, (10,y10)→(10.1,cubic(.1,y9,y10,y11,y12))… ) Obviamente, esses pontos precisariam ser escalados para ox e y dimensões da imagem a ser renderizada.
Teoria
Agora, como a página / rotina que referi não cita nenhuma fonte, vale a pena explicar de onde vêm essas rotinas cúbicas (e como elas funcionam). Tanto o que reproduzi acima, quanto o spline Catmull-Rom muito semelhante que ele menciona logo abaixo, são dois casos específicos de uso do seguinte núcleo de convolução cúbica:
A rotina listada acima corresponde a um valor deα=−1 e o spline Catmull-Rom corresponde a α=−1/2 . Não entrarei em muitos detalhes sobre como a forma geral do kernel é derivada, mas envolve várias restrições, como garantir queψ(x) é um em zero e zero em todos os outros números inteiros.
Isto é o que parece:
As duas opções para o valor deα provêm de tentativas de combinar vários aspectos da função sinc , o núcleo de reconstrução ideal. Configuraçãoα=−1 faz a derivada de ψ coincidir com a derivada da função sinc em x=1 e tornando-o igual a −1/2 fornece a melhor aproximação de baixa frequência. Em todas as contas, um valor deα=−1/2 possui propriedades muito melhores no geral, portanto é provavelmente o melhor valor para usar na prática. Uma discussão muito mais extensa pode ser encontrada no documento a seguir, começando na página 328:
Discernimento
Agora, apenas olhando para o kernel em relação à implementação real do código de interpolação, pode não estar claro como os dois estão relacionados. Basicamente, o processo de interpolação pode ser considerado como a adição de cópias deslocadas do kernel, que são dimensionadas pelas amostras dos dados, da seguinte forma:
De fato, se você tiver uma implementação do kernel, poderá usá-lo diretamente para fazer a interpolação, da seguinte maneira:
No entanto, é muito menos eficiente computacionalmente fazê-lo dessa maneira. Como uma ponte da abordagem direta do kernel para a mais simplificada acima, considere que, com um pouco de manipulação algébrica, a primeira implementação pode ser colocada da seguinte forma:
Nesta formulação, osα=−1 , igual a:
c0...c3
valores podem ser considerados os coeficientes de um filtro FIR que é aplicado aos valores da amostra. Agora é muito mais fácil ver como derivar a rotina do kernel. Considere o kernel comAgora avalie esse kernel simbolicamente em várias compensações deslocadas, tendo em mente queμ ) varia de
mu
(0
a1
:Observe queμ−1,μ−2 seja "virado" para 1−μ,2−μ respectivamente, devido ao valor absoluto no x na definição do kernel. Agora, temos os polinômios exatos que são usados na "versão FIR" da rotina de interpolação. A avaliação desses polinômios pode então ser mais eficiente através de técnicas padrão (por exemplo , método de Horner ). Coisas semelhantes podem ser feitas com outros kernels e também existem outras maneiras de construir implementações eficientes ( consulte a Home Page da Digital Audio Resampling Home ).
fonte