![]() |
VOOZH | about |
dotnet add package ImageSimilarity --version 1.0.2
NuGet\Install-Package ImageSimilarity -Version 1.0.2
<PackageReference Include="ImageSimilarity" Version="1.0.2" />
<PackageVersion Include="ImageSimilarity" Version="1.0.2" />Directory.Packages.props
<PackageReference Include="ImageSimilarity" />Project file
paket add ImageSimilarity --version 1.0.2
#r "nuget: ImageSimilarity, 1.0.2"
#:package ImageSimilarity@1.0.2
#addin nuget:?package=ImageSimilarity&version=1.0.2Install as a Cake Addin
#tool nuget:?package=ImageSimilarity&version=1.0.2Install as a Cake Tool
ImageSimilarity — .NET-библиотека для сравнения изображений по ключевым точкам (ORB) и гомографии (RANSAC) через Emgu CV.
Позволяет определить, являются ли два изображения одним и тем же исходником, даже если они:
Библиотека возвращает числовую оценку сходства 0.0–1.0, а также подробные метрики матчинга.
SimilarityScore.dotnet add package ImageSimilarity
using ImageSimilarity;
var comparer = new ImageHomographyComparer();
var result = comparer.CompareFiles("original.jpg", "modified.jpg");
Console.WriteLine($"Score: {result.SimilarityScore:F3}");
Console.WriteLine($"Total matches: {result.TotalMatches}");
Console.WriteLine($"Inliers: {result.InliersCount}");
Console.WriteLine($"Inlier ratio: {result.InliersRatio:F3}");
Console.WriteLine($"Same origin: {result.IsSameOrigin()}");
Рекомендуемая шкала:
| Score | Значение |
|---|---|
| 0.00–0.10 | Сцены разные |
| 0.10–0.40 | Некоторая общая структура / фон |
| 0.40–0.70 | Тот же источник, но с сильными изменениями (текст, фильтр, кадрирование) |
| 0.70–1.00 | Очень похожие изображения, один и тот же исходник |
IsSameOrigin() по умолчанию использует пороги:
SimilarityScore >= 0.5InliersCount >= 15Нормализация масштаба
Преобразование в градации серого
ORB: детекция + дескрипторы
KNN-matching (k=2) + Lowe Ratio Test
Гомография через RANSAC
Адаптивный скоринг
public int TargetLongSide { get; set; } = 600;
public int NumberOfFeatures { get; set; } = 1500;
public float ScaleFactor { get; set; } = 1.2f;
public int NLevels { get; set; } = 8;
public double LoweRatio { get; set; } = 0.75;
public double RansacReprojThreshold { get; set; } = 3.0;
Можно свободно настраивать.
var builder = WebApplication.CreateBuilder(args);
var app = WebApplication.Create();
app.MapPost("/compare", async (HttpRequest request) =>
{
var form = await request.ReadFormAsync();
var source = form.Files.GetFile("source");
var search = form.Files.GetFile("search");
var temp1 = Path.GetTempFileName();
var temp2 = Path.GetTempFileName();
using (var s = File.Create(temp1)) await source.CopyToAsync(s);
using (var s = File.Create(temp2)) await search.CopyToAsync(s);
var comparer = new ImageHomographyComparer();
var result = comparer.CompareFiles(temp1, temp2);
return Results.Json(result);
});
app.Run();
HomographyResultpublic class HomographyResult
{
public int TotalMatches { get; set; }
public int InliersCount { get; set; }
public double InliersRatio { get; set; }
public double SimilarityScore { get; set; }
public bool IsSameOrigin(double scoreThreshold = 0.5, int minInliers = 15)
{
return SimilarityScore >= scoreThreshold && InliersCount >= minInliers;
}
}
Если хочешь добавить новые функции или предложить улучшения — открывай issue или Pull Request.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.