Как удалить царапину с изображения с помощью matlab
Допустим, у меня есть этот образ это :
С черной царапиной, и я хочу удалить ее с моего изображения. Я знаю, что это шум. Я пробовал соседский фильтр, а также фильтр Гаусса, но безуспешно.
3 ответа:
Если вы знаете, где находится царапина, эта проблема известна какinpaining , и для этого существуют очень сложные алгоритмы. Поэтому один из подходов заключается в том, чтобы обнаружить царапину как можно лучше, а затем использовать стандартный алгоритм рисования на ней. Я немного поиграл с вашим образом в Mathematica:
Сначала я применил к изображению медианный фильтр. Как вы сами выяснили, это устраняет царапину, но также удаляет много деталей. Разница между медианой и хотя оригинальное изображение-хороший индикатор для вашей царапины:
Когда я бинаризую это изображение с выбранным вручную порогом, я получаю быстрый и грязный детектор царапин:
Если у вас есть больше знаний о том, как выглядят ваши царапины, вы можете значительно улучшить этот детектор. например, царапины всегда темные? Всегда ли они отличаются высокой контрастностью? Всегда ли они гладкие кривые, то есть всегда ли их кривизна низкая? - Каждое из этих свойств можно как-то измерить, так что вы бы объедините эти измерения в одно изображение и бинаризуйте его.
Одним из небольших улучшений является удаление мелких компонентов:
Это все еще не идеально, но результат достаточно хорош, чтобы использовать его в качестве маски для рисования.:
Это также уберет некоторые детали, но различия труднее заметить.
Полный код Mathematica:
difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]]; mask = DeleteSmallComponents[Binarize[difference, 0.15], 15]; Inpaint[sourceImage, mask]
Редактировать:
Если у вас нет доступа к стандартному алгоритму рисования (например, Navier Stokes или Telea), алгоритм бедного человека состоял бы в использовании медианного отфильтрованного изображения в тех областях, где маска равна 1 (вероятно, что-то вроде
mask*sourceImage + (1-mask)*medialFilteredImage
в Matlab). В зависимости от данных изображения, разница может не стоить дополнительных усилий" реального " алгоритма рисования:
Фильтрдля Avisynth и плагиндля VirtualDub (два моих любимых инструмента редактирования видео). Он вряд ли будет лучше, чем эти два (вы можете учиться у них, если вам действительно нужно реализовать его самостоятельно).