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 ¶
- func Gif(img *image.RGBA, path string)
- func Hash(img image.Image) (h []float32, imgSize image.Point)
- func Jpg(img *image.RGBA, path string, quality int)
- func Open(path string) (img image.Image, err error)
- func Png(img *image.RGBA, path string)
- func ResampleByNearest(inImg image.Image, outImgSize image.Point) (outImg image.RGBA, inImgSize image.Point)
- func Similar(hA, hB []float32, imgSizeA, imgSizeB image.Point) bool
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Hash ¶
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.
Types ¶
This section is empty.