Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何用matlab去除图像中的划痕_Image_Matlab_Image Processing - Fatal编程技术网

Image 如何用matlab去除图像中的划痕

Image 如何用matlab去除图像中的划痕,image,matlab,image-processing,Image,Matlab,Image Processing,假设我有这样一个图像: 我想把它从我的图像中删除。我知道这是噪音。我尝试过邻域滤波器和高斯滤波器,但没有成功 如果你知道划痕的位置,这个问题称为,有非常复杂的算法。因此,一种方法是尽可能好地检测划痕,然后对其使用标准的修复算法。我在Mathematica中玩了一下你的形象: 首先,我对图像应用了中值滤波器。正如你自己发现的那样,这消除了划痕,但也消除了很多细节。中间图像和原始图像之间的差异是一个很好的划痕指示器,不过: 当我使用手动选择的阈值对该图像进行二值化时,我会得到一个快速脏刮检测器:

假设我有这样一个图像:


我想把它从我的图像中删除。我知道这是噪音。我尝试过邻域滤波器和高斯滤波器,但没有成功

如果你知道划痕的位置,这个问题称为,有非常复杂的算法。因此,一种方法是尽可能好地检测划痕,然后对其使用标准的修复算法。我在Mathematica中玩了一下你的形象:

首先,我对图像应用了中值滤波器。正如你自己发现的那样,这消除了划痕,但也消除了很多细节。中间图像和原始图像之间的差异是一个很好的划痕指示器,不过:

当我使用手动选择的阈值对该图像进行二值化时,我会得到一个快速脏刮检测器:

如果你对你的划痕有更多的了解,你可以改进这个探测器很多。e、 划痕总是黑色的吗?它们总是有高对比度吗?它们是否总是平滑的曲线,即它们的曲率是否总是较低这些属性中的每一个都可以通过某种方式进行测量,因此您可以将这些测量结果组合到一个图像中,并对其进行二值化

一个小的改进是移除小部件:

这仍然不是完美的,但结果足够好,可以用作修复遮罩:

这也会删除一些细节,但差异更难发现

完整的Mathematica代码:

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
)。根据图像数据,这种差异可能不值得“真实”修复算法付出额外的努力:


A和A(我最喜欢的两个视频编辑工具)。它很难比这两个更好(如果您真的需要自己实现它,您可以从中学习)。

我使用中值滤波器和ImageJ的结果


了解您已经尝试过的内容(如果有的话)将非常有用。好吧,这一次我认为我们可以识别被噪声破坏的像素并应用过滤。。为此,识别一个过滤器是一项手头上的任务。我尝试了中值滤波器,它可以工作,但会使图像模糊很多,但我首先将其转换为灰色图像。。。如果我想从RGB图像中删除划痕,该怎么办?划痕的位置已知吗?不知道。。我必须设法探测到这个区域并找到一种方法来移除它真的很好谢谢!我所做的正如u所说的,首先,应用带遮罩的中值滤波器[5],然后用原始图像减去我的图像,并接收第一幅图像,第三,我所做的是用阈值0.7对图像进行二值化,得到图像是否在那里,我可以移除我检测到的划痕并从中移除它this@user1009156:Mathematica,IPP,OpenCV都内置了修复功能,所以我从来不需要自己实现它。这不是小事。最简单的方法可能是在谷歌上搜索“修复+Matlab”并查找代码示例。查看关于“水平线”的学术论文以进行修复和排除。这项技术可以处理相当严重的照片损坏。一些论文:Masnou和Morel math撰写的《基于水平线的不一致》,univ-lyon1.fr/~Masnou/fichiers/publications/icip.pdf《图像修复》,作者:Bertalmio、Sapiro、Caselles和Ballester