| | Begin |
| | CosineSimilarity (A, B) { |
| | RETURN DotProduct (A, B)/(Norm (A) Norm (B)); |
| | } |
| | CalculateMeanVector (Vectors) { |
| | RETURN average of vectors along each dimension; |
| | } |
| | CalculateStandardDeviation (Vectors) { |
| | RETURN standard deviation of vectors along each dimension; |
| | } |
| | CalculateCosineSimilarities (ImageVectors) { |
| | CosineSimilarities ← Empty list; |
| | FOR each vector in ImageVectors { |
| | Cosine ← CosineSimilarity (Vector, CalculateMeanVector (All previous vectors in ImageVectors)); |
| | Append Cosine to CosineSimilarities; |
| | } |
| | RETURN CosineSimilarities; |
| | } |
| | CalculateThresholds (CosineSimilarities) { |
| | Mean ← calculate mean of CosineSimilarities; |
| | StdDev ← CalculateStandardDeviation (CosineSimilarities); |
| | ThresholdHigh ← mean + 3 StdDev; |
| | ThresholdLow ← mean − 3 StdDev; |
| | RETURN ThresholdHigh, ThresholdLow; |
| | } |
| | FilterImagesByCosineSimilarity (ImageVectors) { |
| | CosineSimilarities ← CalculateCosineSimilarities (ImageVectors); |
| | ThresholdHigh, ThresholdLow ← CalculateThresholds (CosineSimilarities); |
| | FilteredImages ← Empty list; |
| | FOR each Cosine in CosineSimilarities { |
| | IF Cosine is within ThresholdHigh and ThresholdLow { |
| | Append corresponding ImageVector to FilteredImages; |
| | } |
| | } |
| | RETURN FilteredImages; |
| | } |
| | End |