Matlab realiza detecção de linha de transformada Hough

No sistema de coordenadas retangulares, existem linhas retas na imagem da seguinte forma: Pegue 3 pontos (0,4), (1,2) e (2,0) na linha.

 Qualquer um dos três pontos acima pode passar por qualquer número de linhas retas. Tome a distância de uma linha reta até a origem (0,0) como o diâmetro polar das coordenadas polares e, em seguida, tome o ângulo formado pelo diâmetro polar e o eixo das abcissas. Então cada linha reta pode ser determinada pelas coordenadas polares, representadas por um ponto.

Por exemplo: A figura abaixo mostra uma linha reta passando pelo ponto (0,4), a distância entre a origem (0,0) e a linha reta é o raio polar, o comprimento é 3,9 e o ângulo entre o ponto polar o raio e o eixo das abcissas são 81 °. Obtenha um ponto em coordenadas polares (3.9,81).

 A imagem abaixo mostra um ponto (3.9,81) após a linha reta no sistema de coordenadas cartesianas da imagem acima ser convertida em coordenadas polares.

Não existe apenas uma linha reta passando pelo ponto (0,4) na figura acima, mas pode haver qualquer número de linhas retas. Cada reta que passa pelo ponto (0,4) corresponde a um ponto em coordenadas polares, e uma curva em coordenadas polares pode ser obtida.

Desenhe uma linha reta através do ponto (0,4) com um intervalo de 5° e use coordenadas polares para representá-la. O programa matlab e os resultados das coordenadas polares são os seguintes:

x=0;y=4;
a=zeros(1,72);
for jiaodu=1:72
    a(jiaodu)=tan(jiaodu*5/180*3.14);
end
b=-1;
[i,j]=size(a);
c=zeros(i,j);
for z=1:j
    c(z)=0-a(z)*x-b*y;
end
d=zeros(i,j);
zeta=zeros(i,j);
for w=1:j
      d(w)=abs(c(w))/(a(w)^2+b^2)^0.5;
      y0=(-1*b*c(w))/(a(w)^2+b^2)^0.5;
      x0=(-1*a(w)*c(w))/(a(w)^2+b^2)^0.5;
      if x0<=0 && y0>=0
          zeta(w)=atan(y0/x0)*180/3.14+180;
      else
          zeta(w)=atan(y0/x0)*180/3.14;
    end
end
figure(1);
scatter(zeta,d);

Quando o ângulo incluído é 90°, o diâmetro polar máximo é 4. Quando o ângulo incluído é 0° e 180°, o diâmetro polar é 0, porque neste momento a reta que passa pelo ponto (0,4) coincide com o eixo das ordenadas, passando pelo ponto (0,0).

 Execute a mesma transformação nos três pontos (0,4), (1,2) e (2,0) no sistema de coordenadas retangulares. O programa matlab e os resultados das coordenadas polares são os seguintes:

x=[0,1,2];
y=[4,2,0];
[m,v]=size(x);

a=zeros(1,72);
for jiaodu=1:72
    a(jiaodu)=tan(jiaodu*5/180*3.14);
end
b=-1;
[i,j]=size(a);
c=zeros(i,j);

for q=1:v
for z=1:j
    c(z)=0-a(z)*x(q)-b*y(q);
end
d=zeros(i,j);
zeta=zeros(i,j);
for w=1:j
      d(w)=abs(c(w))/(a(w)^2+b^2)^0.5;
      y0=(-1*b*c(w))/(a(w)^2+b^2)^0.5;
      x0=(-1*a(w)*c(w))/(a(w)^2+b^2)^0.5;
    if x0<=0 && y0>=0
          zeta(w)=atan(y0/x0)*180/3.14+180;
      else
          zeta(w)=atan(y0/x0)*180/3.14;
    end
end
hold on;
scatter(zeta,d);
end

 Pode-se observar que as três curvas de coordenadas polares possuem um ponto de intersecção. Significa que dentre todas as retas que passam por 3 pontos, 3 retas coincidem, ou seja, os 3 pontos estão na mesma reta, então é detectada uma reta na imagem.

 

Acho que você gosta

Origin blog.csdn.net/weixin_56832351/article/details/129199839
Recomendado
Clasificación