images

package module
v2.0.1+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 31, 2020 License: MIT Imports: 7 Imported by: 0

README

Comparing images in Go

Demo: similar image search and clustering (deployed from).

Near duplicates and resized images can be found with the package. There are no dependencies: only the Golang standard library is used. Supported image types: GIF, JPEG and PNG (golang.org/pkg/image/ as in October 2018).

Similar function gives a verdict whether 2 images are similar or not. The library also contains wrapper functions to open/save images and basic image resampling/resizing.

Documentation: godoc.

Example of comparing 2 photos

package main

import (
	"fmt"
	"github.com/vitali-fedulov/images"
)

func main() {
	
	// Open photos.
	imgA, err := images.Open("photoA.jpg")
	if err != nil {
		panic(err)
	}
	imgB, err := images.Open("photoB.jpg")
	if err != nil {
		panic(err)
	}
	
	// Calculate hashes and image sizes.
	hashA, imgSizeA := images.Hash(imgA)
	hashB, imgSizeB := images.Hash(imgB)
	
	// Image comparison.
	if images.Similar(hashA, hashB, imgSizeA, imgSizeB) {
		fmt.Println("Images are similar.")
	} else {
		fmt.Println("Images are distinct.")
	}
}

Algorithm for image comparison

Detailed explanation with illustrations.

Summary: In the algorithm images are resized to small squares of fixed size. A number of masks representing several sample pixels are run against the resized images to calculate average color values. Then the values are compared to give the similarity verdict. Also image proportions are used to avoid matching images of distinct shape.

Documentation

Overview

Package images allows image comparison by perceptual similarity. Supported image types are those default to the Go image package https://golang.org/pkg/image/ (which are GIF, JPEG and PNG in October 2018).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Gif

func Gif(img *image.RGBA, path string)

Gif saves image.RGBA to a file.

func Hash

func Hash(img image.Image) (h []float32,
	imgSize image.Point)

Hash calculates a slice of average color values of an image at the position of white pixels of a mask. One average value corresponds to one mask. The function also returns the original image width and height.

func Jpg

func Jpg(img *image.RGBA, path string, quality int)

Jpg saves image.RGBA to a file.

func Open

func Open(path string) (img image.Image, err error)

Open opens and decodes an image file for a given path.

func Png

func Png(img *image.RGBA, path string)

Png saves image.RGBA to a file.

func ResampleByNearest

func ResampleByNearest(inImg image.Image, outImgSize image.Point) (
	outImg image.RGBA, inImgSize image.Point)

ResampleByNearest resizes an image by the nearest neighbour method to the output size outX, outY. It also returns the size inX, inY of the input image.

func Similar

func Similar(hA, hB []float32, imgSizeA, imgSizeB image.Point) bool

Similar function gives a verdict for image A and B based on their hashes and sizes. The input parameters are generated with the Hash function.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL