Относительно краев: Я бы предположил, что Photoshop использует нечто более сложное, чем простой производный фильтр (например, Собел), для обнаружения краев.Существуют алгоритмы обнаружения ребер, которые пытаются найти только «выступающие» ребра, то есть те, которые имеют отношение к человеческому зрению, то есть ребра, которые рисовал бы художник, если бы он делал эскиз линии.Старый и (довольно) простой алгоритм, который идет в этом направлении (хотя бы немного), - это детектор краев Canny .Вы должны быть в состоянии найти реализацию этого.Google для "существенных краев" для текущей исследовательской литературы, но не ожидайте реализации или хорошего псевдокода в научных статьях.
Относительно постеризации: Учитывая их выступления в SIGGRAPH, ребята из Adobe оченьмного в двусторонней фильтрации (пожалуйста, Google, я не могу связать больше), техника сглаживания, которая сохраняет важные края.Я думаю, что если вы примените двусторонний фильтр и постеризируете впоследствии, вы должны приблизиться к желаемому виду.К сожалению, эффективная реализация двустороннего фильтра не тривиальна.
Обновление для всех, кто еще интересуется этой темой
Двусторонний фильтр, который я предложил выше, все чаще заменяется на Управляемый фильтр , по крайней мере, в сообществе Computer Vision (графика, кажется, люди еще не реализовали Управляемый фильтр).Управляемый фильтр достигает аналогичных результатов, но его гораздо проще реализовать эффективно.Точный алгоритм для Управляемого фильтра очень эффективен, в то время как эффективная двусторонняя фильтрация требует приближений или безумно сложных алгоритмов.