Хлоп! Я бился головой об этом много лет назад и никогда не придумал жизнеспособного ответа на мою проблему. У меня были некоторые мысли с тех пор, как я не пытался их реализовать, и я выброшу их на всякий случай, если они принесут вам пользу:
Я не согласен с утверждением Эла Кроули о средних значениях RGB - кадрирование вполне может быть удалением объекта, который сильно отличается от цели.
Кроме того, наблюдение: уменьшение изображения до миниатюры 8х8 (не то, что оно достаточно велико для человеческого глаза) и взятие квадрата разности каждого компонента делает довольно хорошую работу по выделению дубликатов и часто работает даже с небольшими культурами вокруг края. В идеале контраст должен быть нормализован перед созданием миниатюры, я не делал этого и обнаружил, что куча низкоконтрастных изображений дублирует друг друга, когда они вообще не имеют сходства. Этот подход использует только 192 байта на изображение и, таким образом, позволяет сравнивать большое количество изображений в памяти, хотя это все еще алгоритм O (n ^ 2). (Я сделал это, чтобы вы могли закрыть программу в любое время, она выдаст информацию о состоянии и закроется, в следующий раз она возобновит работу с того места, где она остановилась.)
Учитывая то, что вы описываете как проблему, я был бы склонен попытаться взять набор тестовых культур изображения и провести сравнение с каждой культурой. Когда вы найдете вероятного кандидата, тогда начните работать с большими изображениями и попытайтесь сузить его, пробежав несколько пикселей и посмотрев, станет ли он лучше или хуже. Я не могу представить ничего, кроме очень медленного исполнения от такой рутины.