Extraiga un filtro de movimiento usando el movimiento de la cámara en número de píxeles y ángulos, en VHDL o Verilog

0

He leído algunos artículos sobre el tema y he buscado algún algoritmo MATLAB. Hay uno llamado 'fspecial' en MATLAB. Y podría devolver un filtro de movimiento, cuando el movimiento se da en número de píxeles y ángulos. He leído los principios de trabajo 'fspecial' y contiene muchas funciones integradas de MATLAB como max, mod, cos, sin, sign, fix, meshgrid, sqrt, abs, find. ¿Es difícil implementar este código MATLAB en VHDL para obtener un filtro de Motion Blur?

... This code is portion of 'fspecial' in MATLAB ******
case 'motion' % Motion filter uses bilinear interpolation

 len = max(1,p2);
 half = (len-1)/2;% rotate half length around center
 phi = mod(p3,180)/180*pi;

 cosphi = cos(phi);
 sinphi = sin(phi);
 xsign = sign(cosphi);
 linewdt = 1;

 % define mesh for the half matrix, eps takes care of the right size
 % for 0 & 90 rotation
 sx = fix(half*cosphi + linewdt*xsign - len*eps);
 sy = fix(half*sinphi + linewdt - len*eps);
 [x y] = meshgrid(0:xsign:sx, 0:sy);

 % define shortest distance from a pixel to the rotated line 
 dist2line = (y*cosphi-x*sinphi);% distance perpendicular to the line

 rad = sqrt(x.^2 + y.^2);
 % find points beyond the line's end-point but within the line width
 lastpix = find((rad >= half)&(abs(dist2line)<=linewdt));
 %distance to the line's end-point parallel to the line 
 x2lastpix = half - abs((x(lastpix) + dist2line(lastpix)*sinphi)/cosphi);

 dist2line(lastpix) = sqrt(dist2line(lastpix).^2 + x2lastpix.^2);
 dist2line = linewdt + eps - abs(dist2line);
 dist2line(dist2line<0) = 0;% zero out anything beyond line width

 % unfold half-matrix to the full size
 h = rot90(dist2line,2);
 h(end+(1:end)-1,end+(1:end)-1) = dist2line;
 h = h./(sum(h(:)) + eps*len*len);

 if cosphi>0,
   h = flipud(h);
 end

Me pregunto si tengo la forma correcta de implementar un filtro de movimiento en VHDL. Tal vez debería haber una forma efectiva para esta tarea? ¿O ya está implementado el filtro de movimiento en VHDL o Verilog?

Gracias.

    
pregunta doner_t

1 respuesta

1

La implementación de esa función en Verilog o VHDL está lejos de ser trivial. También lo que recojo debe calcularse para cada píxel. Por lo tanto, necesitará una cantidad de od [censurada] si se trata de una canalización y / o procesamiento paralelo.

Entonces todavía necesitas una forma de introducir y sacar los píxeles de tu FPGA. Todo y todo un proyecto que, no diré, no se puede hacer, pero sospecho que está más allá de tus habilidades.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas