| 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 |