Percentage difference between images

From Rosetta Code
Revision as of 23:03, 13 November 2008 by rosettacode>Blue Prawn (initial version with OCaml)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Compare the percentage of difference between 2 images of same size.

May be used for example to compare 2 JPEG images saved with a different compression.

(Notice: I'm not sure if this task does fit for Rosettacode. If not just remove it)

OCaml

<ocaml>#! /usr/bin/env ocaml

  1. directory "+glMLite/"
  2. load "jpeg_loader.cma"
  3. load "bigarray.cma"

open Jpeg_loader

let () =

 let img1, width1, height1, col_comp1, color_space1 = load_img (Filename Sys.argv.(1))
 and img2, width2, height2, col_comp2, color_space2 = load_img (Filename Sys.argv.(2)) in
 assert(width1 = width2);
 assert(height1 = height2);
 assert(col_comp1 = col_comp2);  (* number of color components *)
 assert(color_space1 = color_space2);
 let img1 = Bigarray.array3_of_genarray img1
 and img2 = Bigarray.array3_of_genarray img2 in
 let sum = ref 0.0
 and num = ref 0 in
 for x=0 to pred width1 do
   for y=0 to pred height1 do
     for c=0 to pred col_comp1 do
       let v1 = float img1.{x,y,c}
       and v2 = float img2.{x,y,c} in
       let diff = (abs_float (v1 -. v2)) /. 255. in
       sum := diff +. !sum;
       incr num;
     done;
   done;
 done;
 let diff_percent = !sum /. float !num in
 Printf.printf " diff: %f percent\n" diff_percent;
</ocaml>