OpenCV453
クラス | 列挙型 | 関数
The module brings implementations of different image hashing algorithms.

クラス

class  cv::img_hash::AverageHash
 Computes average hash value of the input image [詳解]
 
class  cv::img_hash::BlockMeanHash
 Image hash based on block mean. [詳解]
 
class  cv::img_hash::ColorMomentHash
 Image hash based on color moments. [詳解]
 
class  cv::img_hash::ImgHashBase
 The base class for image hash algorithms [詳解]
 
class  cv::img_hash::MarrHildrethHash
 Marr-Hildreth Operator Based Hash, slowest but more discriminative. [詳解]
 
class  cv::img_hash::PHash
 pHash [詳解]
 
class  cv::img_hash::RadialVarianceHash
 Image hash based on Radon transform. [詳解]
 

列挙型

enum  cv::img_hash::BlockMeanHashMode { cv::img_hash::BLOCK_MEAN_HASH_MODE_0 = 0 , cv::img_hash::BLOCK_MEAN_HASH_MODE_1 = 1 }
 

関数

CV_EXPORTS_W void cv::img_hash::averageHash (cv::InputArray inputArr, cv::OutputArray outputArr)
 Calculates img_hash::AverageHash in one call [詳解]
 
CV_EXPORTS_W void cv::img_hash::blockMeanHash (cv::InputArray inputArr, cv::OutputArray outputArr, int mode=BLOCK_MEAN_HASH_MODE_0)
 Computes block mean hash of the input image [詳解]
 
CV_EXPORTS_W void cv::img_hash::colorMomentHash (cv::InputArray inputArr, cv::OutputArray outputArr)
 Computes color moment hash of the input, the algorithm is come from the paper "Perceptual Hashing for Color Images Using Invariant Moments" [詳解]
 
CV_EXPORTS_W void cv::img_hash::marrHildrethHash (cv::InputArray inputArr, cv::OutputArray outputArr, float alpha=2.0f, float scale=1.0f)
 Computes average hash value of the input image [詳解]
 
CV_EXPORTS_W void cv::img_hash::pHash (cv::InputArray inputArr, cv::OutputArray outputArr)
 Computes pHash value of the input image [詳解]
 
CV_EXPORTS_W void cv::img_hash::radialVarianceHash (cv::InputArray inputArr, cv::OutputArray outputArr, double sigma=1, int numOfAngleLine=180)
 Computes radial variance hash of the input image [詳解]
 

詳解

Provide algorithms to extract the hash of images and fast way to figure out most similar images in huge data set.

Namespace for all functions is cv::img_hash.

Supported Algorithms

You can study more about image hashing from following paper and websites:

Code Example

Performance under different attacks

Performance chart

Speed comparison with PHash library (100 images from ukbench)

Hash Computation chart Hash comparison chart

As you can see, hash computation speed of img_hash module outperform PHash library a lot.

PS : I do not list out the comparison of Average hash, PHash and Color Moment hash, because I cannot find them in PHash.

Motivation

Collects useful image hash algorithms into opencv, so we do not need to rewrite them by ourselves again and again or rely on another 3rd party library(ex : PHash library). BOVW or correlation matching are good and robust, but they are very slow compare with image hash, if you need to deal with large scale CBIR(content based image retrieval) problem, image hash is a more reasonable solution.

More info

You can learn more about img_hash modules from following links, these links show you how to find similar image from ukbench dataset, provide thorough benchmark of different attacks(contrast, blur, noise(gaussion,pepper and salt), jpeg compression, watermark, resize).

Introduction to image hash module of opencv Speed up image hashing of opencv(img_hash) and introduce color moment hash

Contributors

Tham Ngap Wei, thamn.nosp@m.gapw.nosp@m.ei@gm.nosp@m.ail..nosp@m.com

列挙型詳解

◆ BlockMeanHashMode

列挙値
BLOCK_MEAN_HASH_MODE_0 

use fewer block and generate 16*16/8 uchar hash value

BLOCK_MEAN_HASH_MODE_1 

use block blocks(step sizes/2), generate 31*31/8 + 1 uchar hash value

関数詳解

◆ averageHash()

CV_EXPORTS_W void cv::img_hash::averageHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr 
)

Calculates img_hash::AverageHash in one call

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3 or CV_8UC1.
outputArrHash value of input, it will contain 16 hex decimal number, return type is CV_8U

◆ blockMeanHash()

CV_EXPORTS_W void cv::img_hash::blockMeanHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr,
int  mode = BLOCK_MEAN_HASH_MODE_0 
)

Computes block mean hash of the input image

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3 or CV_8UC1.
outputArrHash value of input, it will contain 16 hex decimal number, return type is CV_8U
modethe mode

◆ colorMomentHash()

CV_EXPORTS_W void cv::img_hash::colorMomentHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr 
)

Computes color moment hash of the input, the algorithm is come from the paper "Perceptual Hashing for Color Images Using Invariant Moments"

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3 or CV_8UC1.
outputArr42 hash values with type CV_64F(double)

◆ marrHildrethHash()

CV_EXPORTS_W void cv::img_hash::marrHildrethHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr,
float  alpha = 2.0f,
float  scale = 1.0f 
)

Computes average hash value of the input image

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3, CV_8UC1.
outputArrHash value of input, it will contain 16 hex decimal number, return type is CV_8U
alphaint scale factor for marr wavelet (default=2).
scaleint level of scale factor (default = 1)

◆ pHash()

CV_EXPORTS_W void cv::img_hash::pHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr 
)

Computes pHash value of the input image

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3, CV_8UC1.
outputArrHash value of input, it will contain 8 uchar value

◆ radialVarianceHash()

CV_EXPORTS_W void cv::img_hash::radialVarianceHash ( cv::InputArray  inputArr,
cv::OutputArray  outputArr,
double  sigma = 1,
int  numOfAngleLine = 180 
)

Computes radial variance hash of the input image

引数
inputArrinput image want to compute hash value, type should be CV_8UC4, CV_8UC3, CV_8UC1.
outputArrHash value of input
sigmaGaussian kernel standard deviation
numOfAngleLineThe number of angles to consider