es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener las coordenadas de píxel X,Y después de usar match_template en ArrayFire?

Pregunta

Estoy tratando de usar la función de plantilla coincidente (matching template) de la librería ArrayFire pero no sé cómo encontrar las coordenadas X e Y del valor coincidente mejor.
Anteriormente estaba usando la librería imageproc para realizar esta función y allí tenía la función encontrar extremos (find extremes) que me devuelve las coordenadas. ¿Cómo podría hacer lo mismo usando la librería ArrayFire?

Mi ejemplo usando imageproc

    let template = image::open("connect.png").unwrap().to_luma8();
    let screenshot = image::open("screenshot.png").unwrap().to_luma8();

   let matching_probability= imageproc::template_matching::match_template(&screenshot, &template, MatchTemplateMethod::CrossCorrelationNormalized);
   let positions = find_extremes(&matching_probability);

 println!("{:?}", positions);

Extremes { maxvalue: 0.9998113, minvalue: 0.42247093,
maxvaluelocation: (843, 696), minvaluelocation: (657, 832) }

Mi ejemplo usando ArrayFire

   let template: Array<u8> = arrayfire::load_image(String::from("connect.png"), true);
   let screenshot: Array<u8> = arrayfire::load_image(String::from("screenshot.png"), true);

   let template_gray = rgb2gray(&template, 0.2126, 0.7152, 0.0722);
   let screen_gray =  rgb2gray(&screenshot, 0.2126, 0.7152, 0.0722);
   let matching_probability = arrayfire::match_template(&screen_gray, &template_gray, arrayfire::MatchType::LSAD);

af_print!("{:?}", matching_probability);

139569.0469 140099.2500 139869.8594 140015.7969 140680.9844 141952.5781 142602.7344 142870.7188…

Desde aquí no tengo idea de cómo obtener las coordenadas de los píxeles coincidentes mejor.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la función af::where para encontrar las coordenadas del valor que mejor coincida. Esta función devuelve los índices de los elementos que cumplen la condición dada. En este caso, puede utilizar la condición matching_probability == af::max(matching_probability) para obtener los índices del elemento con la probabilidad de coincidencia más alta.

    rust
    let max_value_location = af::where(&matching_probability, af::Eq, af::max(&matching_probability));

    La variable max_value_location contendrá las coordenadas del valor que mejor coincida.

Comments are closed.