Код выглядит на первый взгляд хорошо.Сначала вы должны убедиться, что ваш код вообще способен сходиться к цели, например, передав целевое изображение, сгенерированное вашим алгоритмом, случайным геномом (или очень простое изображение, которое должно быть легко воссоздано вашим алгоритмом).).
Вы используете метрику SAD (сумма абсолютных разностей) между пикселями для расчета пригодности.Вы можете попробовать использовать SSD (сумму квадратов разностей), как вы делаете это в методе различий гистограммы, но между пикселями или блоками, что сильно штрафует большие различия, поэтому оставшиеся изображения не будут слишком отличаться от цели.Вы можете попытаться использовать более воспринимаемое пространство изображений, например HSV, чтобы изображения были ближе визуально, даже если они находятся дальше в пространстве RGB.
Я думаю, что сравнение гистограммы всего изображения может быть слишком слабым, посколькумного разных изображений, которые приведут к одной и той же гистограмме.Сравнение отдельных пикселей может быть слишком строгим, изображение должно быть выровнено очень точно, чтобы получить низкие различия, поэтому все получает низкие значения пригодности, если вам не очень повезло, поэтому сходимость будет слишком медленной.Я бы порекомендовал вам сравнить гистограмму между перекрывающимися блоками, и не использовать все 256 уровней, использовать только около 16 уровней или около того (или использовать какое-то перекрытие).
Читать о Гистограммаориентированных градиентов (HOG) и других подобных техник, чтобы получить идеи для улучшения вашей фитнес-функции.Я прошел онлайн-курс о распознавании объектов в изображениях, Coursera - Deteccion de Objetos от Университета Барселоны , но на испанском языке.Я почти уверен, что вы можете найти похожие учебные материалы на английском языке.
Редактировать: прежде чем пытаться что-то более сложное, хорошей идеей было бы сделать SAD или SSD в среднем для каждого перекрывающегося блока (который имел бы похожееэффект сильного размытия эталонных и сгенерированных изображений и последующего сравнения пикселей, но быстрее).Фитнес-функция должна быть устойчивой к небольшим изменениям.Изображение, смещенное на несколько пикселей или очень похожее после отбрасывания деталей низкого уровня, должно иметь гораздо лучшую пригодность, чем совсем другое изображение, и я думаю, что размытие будет иметь такой эффект.