繁体   English   中英

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

[英]image enhancement - cleaning given image from writing

在此输入图像描述

我需要清理这张图片删除写作“干净我”并让它变得明亮。

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

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

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

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

你能指点一下该怎么办? 中值滤波器不会给出好的结果。

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

在此输入图像描述在此输入图像描述

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

在此输入图像描述

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

现在要注意有许多算法,但我发现的最简单的算法之一是在快速数字图像修补中描述的,它应该很容易实现。 我没有使用它,但你可以验证你可以获得哪些结果。

编辑:我错过了你也想要照亮图像。

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

在此输入图像描述在此输入图像描述

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

在此输入图像描述

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

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

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

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

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

问候

像KlausCPH所说,删除文本的最简单方法是在条纹区域使用长1维中值滤波器。 为了不破坏星星,你需要保留这部分的备份并在中值滤波器运行后替换它。 为此,您可以使用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; 

这产生了 在此输入图像描述

要解决曝光问题(中间部分比角落更亮),您可以将二维高斯模型拟合到图像并进行归一化。 如果你想这样做,我建议寻找到fit ,虽然这可能是一个有点技术,如果你尚未与模型拟合前的工作。

我发现的2-D高斯看起来像这样: 在此输入图像描述

把这两件事放在一起,给出: 在此输入图像描述

我用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM