利用Mathematica删除复印产生的黑边


Comments


2025 年 4 月
 123456
78910111213
14151617181920
21222324252627
282930  

假设复印的图像为

手动指定欲删除区域的点

第一种是手动指定欲删除区域的一个或多个点, 并利用RegionBinarize来二值化图像


这里, {1220,1341}是黑边中的一点, Mathematica可以通过在图像上右键获得对应点坐标.

最后利用Inpaint去水印从原图中删除黑边.

自动生成欲删除区域

利用FillingTransform函数我们可以自动定位黑边区域, 从而再利用去水印Inpaint函数删除黑边.

一个完整的处理

接下来, 我将演示如何实际地批量处理一个文档.

定义处理函数

定义工作目录

为了方便, 我们将所有待处理的图像放到一个目录中, 请通过插入->”文件路径”(并删除最后的文件路径, 因为我们要的是该文件所在目录), 这里我假设是在
C:\Users\van\Desktop\new下, 则

查找工作目录下所有图像文件, 请自行添加没有的扩展名

由于数据巨大, 尝试采用并行运算(多核)

遍历整个文件列表, 并将处理后的图片放入当前目录的\new\目录下

效果如图

处理前处理后

《 “利用Mathematica删除复印产生的黑边” 》 有 3 条评论

  1. 勇敢的心 的头像

    我转载您了您的日志,您的想法不错,我平常只是拿他来算东西。不过您这个方法是有瑕疵的,应该处在最后一步,其实用纯数学的办法给他做差效果更好,ColorNegate[
    Image[(ImageData[FillingTransform[img]] /.
    Head -> List) – (ImageData[img] /. Head -> List)]]。您试一下,这样误差只会出现在FillingTransform这个函数上,只要内部没有黑块应该不会有错,这个可以看作纯数学运算,能否用GPU运算呢。

    1. 艾子 的头像

      没懂你意思, 而且你的代码我也不能运行, 希望能把你的代码拆成几步, 分开运行才知道哪里可能错了. 其次, 你说的误差我不懂, 事实上所有过程的关键就只有那个去水印的函数FillingTransform, 二值化函数只是为了把图像变成二值的, 便于去水印.

    2. 艾子 的头像

      又, 我这个办法去掉黑边后会留下黑色区域的一些字, 这个怎么去掉也是值得研究的.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据


Other news

  • 使用Chrome播放本地SWF文件

    两个版本, 一个是选择文件, 一个是直接拖拽。 当然也有合并到一起的办法, 参考这里。直接将下列文件放到和fl…

  • Chrome下载完成后显示病毒扫描失败的解决办法

    很蛋疼的一个提示, 一个pdf下载好后给提示病毒扫描失败。把下载的pdf直接删除了。 解决办法是运行如下的注册…

  • C1驾照学习经验

    历时4个月+15天, 我的C1驾照到手了. 下面分享下经验, 为广大学员解惑。 学驾照, 要趁早 为啥呢, 一…