Zynq FPGA visão binocular design de graduação (7) matlab para alcançar algoritmo de correspondência estéreo

1. Breve descrição

Através do estudo da dissertação de mestrado, compreendo os vários algoritmos de correspondência estéreo, agora o matlab é usado para obter correspondência estéreo binocular.
Link de estudo da tese: Projeto de graduação da visão binocular Zynq FPGA (6) Resumo do estudo da tese de mestrado

2. Código-fonte

Atualmente, a busca epipolar é utilizada, ou seja, a busca é realizada apenas na direção horizontal, e o erro é relativamente grande. A fim de reduzir a dificuldade de implementação em FPGA, não planejamos usar a agregação de vários caminhos, portanto, você deve implementá-los.
Este código-fonte é apenas a parte correspondente, basta adicionar essa parte do algoritmo ao meu código-fonte compartilhado anterior e fazer uma conexão.
Portal: Projeto de graduação de visão binocular Zynq FPGA (5) realização de algoritmo de correção de linha polar matlab

%Census
[B, A, C] = size(new_image_L)

windowsize = 9;
win = (windowsize -1)/2;
D_min = 0;
D_max = 50;


for b = win+1 : B-win
    for a = win+1 : (A-win-D_max)
        %左图census变换
        var_r = zeros(1,windowsize^2);
        parallax = D_min; hamm_data =10000; hamm=0;
        for m = -win : 1 : win
            for n = -win : 1:  win
                if(new_image_R(b+m,a+n) <= new_image_R(b,a))
                    var_r(1,9*n+m+41) = 1;
                else
                    var_r(1,9*n+m+41) = 0;
                end
            end
        end
        %对右图进行变换
        
        for d = D_min : 1 : D_max
            var_l = zeros(1,windowsize^2);
            hamm_value = 0;
            for m = -win : 1 : win
                for n = -win : 1:  win
                    if(new_image_L(b+m,d+a+n) <= new_image_L(b,d+a))
                        var_l(1,9*n+m+41) = 1;
                    else
                        var_l(1,9*n+m+41) = 0;
                    end
                end
            end
            %汉明距离计算
            hamm = xor(var_l,var_r);
            hamm_value = sum(hamm(:) == 1);
            
            if(hamm_data > hamm_value)
                hamm_data = hamm_value;   
                parallax = d;%得到视差值  
            end   
        end
        parallax_image(b-win,a-win)= parallax;
        
    end
end

dispMap = mat2gray(parallax_image);
B=medfilt2(dispMap,[5 5]);%中值滤波,滤波器窗口[9 9]

3. Efeito

O efeito não é muito bom, o principal motivo é que apenas a direção horizontal é usada para pesquisar a correspondência, e o erro é grande. Em segundo lugar, pode-se ver no diagrama do efeito da correção da linha polar que a correção não é muito boa, o que está relacionado ao problema da placa de calibração e ao problema de calibração do matlab, que será ajustado posteriormente. Existe também o gráfico de calibração utilizado, que não consegue destacar a distância do objeto, quando a nova prancha chegar, colete algumas fotos para testar.
Nota: O operador sobel extrai recursos de borda da imagem para reduzir as informações de pixel e também reduz alguns erros. Você também pode combinar diretamente as imagens corrigidas em estéreo sem sobel.
Insira a descrição da imagem aqui

Bem-vindo a seguir minha conta pública: Core Kingdom, há mais compartilhamento de tecnologia FPGA e IC digital, e você também pode obter projetos de FPGA de código aberto!

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_40377195/article/details/105031828
Recomendado
Clasificación