【问题标题】:image enhancement - cleaning given image from writing图像增强 - 从写入中清除给定图像
【发布时间】:2013-01-15 20:26:01
【问题描述】:

我需要清理这张图片,删除“清理我”的文字并使其变亮。

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

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

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

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

你能给我一个方向吗?中值过滤器不会给出好的结果。

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

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

    要得到那个面具,我们不需要任何花哨的东西。从原始图像与其中值滤波结果之间差异的二值化开始:

    您可以移除孤立的像素;通过水平膨胀和另一个带有小正方形的膨胀的组合来连接代表国旗星星的像素;删除这个刚刚创建的最大组件;然后对初始掩码执行测地线膨胀,结果到目前为止。这给出了上面的好掩码。

    现在修复有很多算法,但我发现的最简单的算法之一在Fast Digital Image Inpainting 中进行了描述,它应该很容易实现。我没有使用它,但您可以验证您可以获得哪些结果。

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

    在不使较亮区域变得更亮的情况下,使图像变亮的一种简单方法是应用

    如果你真的想使图像变亮,那么你可以应用双边过滤器并对其进行二值化:

    【讨论】:

    • 非常感谢,我可以使用我创建的中值滤波器清除文字,但是我只能使用我自己的功能。你能帮忙看看高通滤波器代码吗?我需要为了使图片变亮
    • @Androidy 如您所见,我没有使用它来使图像变亮。应用伽马因子是一个非常简单的步骤,没有比这更容易的了。此外,使用中值滤波器“清除”此图像会产生大量伪影,因此您不仅要清除它。由于您可以使用自己的函数,因此您可以实现上面最简单的修复算法。
    • 好的,我使用了高斯高通滤波器。过滤器(D >= 半径^2) = 1-exp(-D(D >= 半径^2)/(2*(sigma^2)));它完成了工作。但我也会尝试修复。谢谢@mmgp
    • @Androidy 我从来没有打算强迫你做任何事情,请选择最能帮助你的事情(我很确定这不是我的答案,因为你已经提到你正在使用中值过滤来解决你的问题)。
    • 如果你没问题,我会让他保留分数,直到他获得更多分数并将答案切换回来。
    【解决方案2】:

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

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

    2) 使用可能 10 像素长的一维中值滤波器

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

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

    问候

    【讨论】:

    • 因为我只能使用我自己的功能。你能写一个关于我需要在直方图 eq 之前做的 highpassFilter 的简短代码吗?我很难理解如何实现它
    • @Androidy 高通滤波器就是1 - your low pass filter
    • @mmgp 我的低通滤波器这里是我的中值滤波器?那我怎么知道截止频率在哪里?
    • @mmgp 我的想法是让我们说找到截止灰度值,比如说 17,而不是像 h= find (im
    • 请检查您的书籍,这是一个微不足道的任意阈值。
    【解决方案3】:

    删除文本的最简单方法是,就像 KlausCPH 所说,在有条纹的区域使用长的一维中值滤波器。为了不损坏星星,您需要保留这部分的备份并在中值滤波器运行后更换它。为此,您可以使用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,尽管如果您以前没有使用过模型拟合,这可能有点技术性。

    我找到的二维高斯看起来像这样:

    将这两件事放在一起,得出:

    【讨论】:

      【解决方案4】:

      我使用 gausswin() 函数来制作高斯。面具:

      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);
      

      将图像与蒙版相乘后得到固定图像。

      【讨论】:

      • 如何解决问题?这个答案怎么能被接受?很奇怪。
      • @mmgp 你的回答帮助我意识到我需要做什么。但是,因为您有 2k+ 点。那个家伙为我节省了一个小时寻找我需要的功能,他没有积分,我接受了他的回答并给了你加 1 分。如果你愿意,我可以把它换回来。不是有意冒犯你。
      • @Androidy 我不担心我,只是这个答案没有解决任何问题,所以如果其他人调查这个问题并查看这个答案,他们至少应该感到困惑。跨度>
      • 好的没问题我会改变的。我能理解你所说的。
      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2011-06-03
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多