图像增强 - 从写入中清除给定的图像

时间:2013-01-12 11:22:48

标签: image matlab image-processing

enter image description here

我需要清理这张照片删除写作“干净我”并使其变亮。

作为我在图像处理课程中作业的一部分,我可以使用matlab函数ginput来查找图像中的特定点(当然在脚本中你应该硬编码你需要的坐标)。

您可以使用conv2,fft2,ifft2,fftshift等。

您也可以使用中位数,平均值,最大值,分钟数,排序等

我的基本想法是使用图片中间的白色和黑色值,并将它们插入黑白条带的其他部分。但是给出了非常合成的外观。

你能告诉我该怎么做?中值滤波器不会给出好的结果。

4 个答案:

答案 0 :(得分:2)

执行此类操作的一般技术称为Inpainting。但是为了做到这一点,你需要一个你想要绘制的区域的面具。所以,让我们假设我们设法得到一个好的面具,并考虑到这个面具的形态膨胀来修复原始图像:

enter image description here enter image description here

为了获得这个面具,我们不需要任何花哨的东西。首先对原始图像与中值滤波结果之间的差异进行二值化:

enter image description here

您可以移除孤立的像素;通过水平膨胀和另一个小方块膨胀的组合,加入代表你旗帜星星的像素;删除这个刚创建的最大组件;然后使用结果对初始掩码执行测地扩张。这给了上面的好面具。

现在要注意有许多算法,但我发现的最简单的算法之一在Fast Digital Image Inpainting中描述,这应该很容易实现。我没有使用它,但你可以验证你可以获得哪些结果。

编辑:我错过了你也希望照亮图像。

通过应用伽马因子<一种简单的方法来使图像变亮而不使更亮的区域更亮。 1.更具体的图像,你可以先应用一个相对较大的低通滤波器,否定它,将原始图像乘以它,然后应用伽马因子。在第二种情况下,最终图像可能比第一个图像更暗,因此您将它乘以一个简单的标量值。以下是这两种情况的结果(左边一只是伽玛0.6):

enter image description here enter image description here

如果您真的想要提亮图像,那么您可以应用双边滤镜并将其二值化:

enter image description here

答案 1 :(得分:1)

我看到两个删除“干净我”的选项。两者都依赖于水平相似性。

1)仅在水平方向使用长1D低通滤波器。

2)使用1D中值滤波器,可能长10像素

对于这两种解决方案,你当然必须排除星球部分。

在亮度方面,您可以尝试直方图均衡。然而,这不会修复亮度的不均匀性。也许在均衡之前的高通可以解决这个问题。

此致

答案 2 :(得分:1)

像KlausCPH所说,删除文本的最简单方法是在条纹区域使用长1-d中值滤波器。为了不破坏星星,你需要保留这部分的备份并在中值滤波器运行后替换它。为此,您可以使用ginput标记星形部分的右下角:

% Mark lower right corner of star-region
figure();imagesc(Im);colormap(gray)
[xCorner,yCorner] = ginput(1);
close
xCorner = round(xCorner); yCorner = round(yCorner);

% Save star region
starBackup = Im(1:yCorner,1:xCorner);

% Clean up stripes
Im = medfilt2(Im,[1,50]);

% Replace star region
Im(1:yCorner,1:xCorner) = starBackup; 

这会产生 enter image description here

要解决曝光问题(中间部分比角落更亮),您可以将二维高斯模型拟合到图像并进行标准化。如果你想这样做,我建议你研究fit,虽然如果你之前没有使用模型拟合,这可能有点技术性。

我发现的2-D高斯看起来像这样: enter image description here

将这两件事放在一起,给出: enter image description here

答案 3 :(得分:0)

我用gausswin()函数做了一个gaus。掩模:

Pic_usa_g =  abs(1 - gausswin(  size(Pic_usa,2)  ));
Pic_usa_g = Pic_usa_g + 0.6;
Pic_usa_g = Pic_usa_g .* 2;
Pic_usa_g = Pic_usa_g';
C = repmat(Pic_usa_g, size(Pic_usa,1),1);

G_Mask

在将图像与蒙版相乘后,您将获得固定图像。

Res