Если вы знаете расположение царапины, эта проблема известна как inpainting , и для этого есть очень сложные алгоритмы. Таким образом, одним из подходов будет обнаружение царапины настолько хорошо, насколько вы можете, а затем использовать стандартный алгоритм рисования на нем. Я немного поиграл с твоим изображением в Mathematica:
Сначала я применил медианный фильтр к изображению. Как вы узнали сами, это удаляет царапины, но также удаляет много деталей. Разница между медианой и исходным изображением является хорошим индикатором вашей царапины, однако:
![difference between median and original image](https://i.stack.imgur.com/OnCCl.png)
Когда я бинаризирую это изображение с выбранным вручную порогом, я получаю быстрый и грязный детектор царапин:
![Binarized](https://i.stack.imgur.com/8C77M.png)
Если у вас есть больше знаний о том, как выглядят ваши царапины, вы можете значительно улучшить этот детектор. например царапины всегда темные? У них всегда высокий контраст? Являются ли они всегда плавными изгибами, то есть всегда ли их кривизна низка? - Каждое из этих свойств может быть измерено каким-либо образом, поэтому вы можете объединить эти измерения в одно изображение и преобразовать его в двоичную форму.
Одним небольшим улучшением является удаление мелких компонентов:
![DeleteSmallComponents](https://i.stack.imgur.com/Libx5.png)
Это все еще не идеально, но результат достаточно хорош, чтобы использовать его как маску для рисования:
![inpainting](https://i.stack.imgur.com/Stlsi.png)
Это также удалит некоторые детали, но различия заметить будет сложнее.
Полный код Mathematica:
difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]
EDIT:
Если у вас нет доступа к стандартному алгоритму рисования (например, Навье-Стоуксу или Телеа), алгоритм бедного человека будет использовать отфильтрованное по медиане изображение в тех регионах, где маска равна 1 (вероятно, что-то вроде mask*sourceImage + (1-mask)*medialFilteredImage
в Matlab). В зависимости от данных изображения, различие может не стоить дополнительных усилий «реального» алгоритма рисования:
![Poor man's inpainting](https://i.stack.imgur.com/UqFlR.png)