public
Last active

Delta-E image diff

  • Download Gist
delta_e_diff.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
require 'chunky_png'
include ChunkyPNG::Color
 
 
images = [
ChunkyPNG::Image.from_file('1.png'),
ChunkyPNG::Image.from_file('2.png')
]
 
output = ChunkyPNG::Image.new(images.first.width, images.last.width, WHITE)
 
diff = []
 
images.first.height.times do |y|
images.first.row(y).each_with_index do |pixel, x|
unless pixel == images.last[x,y]
score = Math.sqrt(
(r(images.last[x,y]) - r(pixel)) ** 2 +
(g(images.last[x,y]) - g(pixel)) ** 2 +
(b(images.last[x,y]) - b(pixel)) ** 2
) / Math.sqrt(MAX ** 2 * 3)
 
output[x,y] = grayscale(MAX - (score * 255).round)
diff << score
end
end
end
 
puts "pixels (total): #{images.first.pixels.length}"
puts "pixels changed: #{diff.length}"
puts "image changed (%): #{(diff.inject {|sum, value| sum + value} / images.first.pixels.length) * 100}%"
 
output.save('diff.png')

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.