假设我有这张图片:这里, 有一个黑色的划痕,我想把它从我的图片中移除。我知道这是噪点。我尝试过邻域滤波器和高斯滤波器,但都没有成功。
difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]
编辑:
如果您没有访问标准修补算法(如Navier Stokes或Telea)的权限,则可以使用中值滤波图像作为贫困算法,在掩模为1的区域中使用(在Matlab中可能类似于mask*sourceImage + (1-mask)*medialFilteredImage
)。根据图像数据,与“真正”的修补算法相比,差异可能不值得额外的努力:
一个Avisynth的过滤器和一个VirtualDub的插件(我的两个最喜欢的视频编辑工具)。这两个工具几乎是最好的选择(如果你真的需要自己实现,你可以从它们中学习)。