You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FFT的手写实拍图像网格线去除方案优化咨询

手写图像背景网格线去除FFT方案优化

需求与现有方案基础

  • 核心目标:去除手写图像上的背景网格线
  • 初始方案思路:通过FFT变换提取网格对应的频域模式,滤除该模式后经逆FFT得到无网格的结果图
  • 测试样本共4组,现有方案仅在合成标准网格样本上生效,真实拍摄样本上处理失效:
    • 第一组为带手写字符的真实手机拍摄图像:受拍摄光照、角度、透视畸变影响,网格线并非严格水平/垂直,网格线颜色深浅不均,部分区域颜色和手写笔迹高度接近。现有处理流程为「图像转灰度→FFT变换→OTSU阈值提取频域特征→阈值生成掩膜做频域掩膜运算→逆FFT输出结果」,该流程在这类真实样本上完全失效。
    • 第二组为无手写字符的空白网格真实拍摄图像:观测其频域特征可确认,中心区域的3条水平、垂直亮线为网格对应的核心频域特征。
    • 第三组为带标准完美实线网格的合成图像:作为对照组,应用现有算法可完全去除网格线。
    • 第四组为带标准完美虚线网格的合成图像:样式更接近真实手写练习纸网格,作为对照组,其频域特征比中心3条亮线的模式更复杂,应用现有算法也可近乎完全去除网格线。

现有实现代码

def FFTCV(img):
    util.Plot(img, 'Input')
    print(img.shape)
    if len(img.shape) == 3 and img.shape[2] == 3:
        img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    util.Plot(img, 'Gray')
    dft = cv.dft(np.float32(img),flags = cv.DFT_COMPLEX_OUTPUT)
    dft_shift = np.fft.fftshift(dft)
    util.Plot(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]), 'fft shift')
    magnitude_spectrum = np.uint8(20*np.log(cv.magnitude(dft_shift[:,:,0],dft_shift[:,:,1])))
    util.Plot(magnitude_spectrum, 'Magnitude')

    _, threshold = cv.threshold(magnitude_spectrum, 0, 1, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
    # 备选自适应阈值方案
    # threshold = cv.adaptiveThreshold(
    #     magnitude_spectrum, 1, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY_INV, 11, 10)
    # threshold = cv.adaptiveThreshold(
    #     magnitude_spectrum, 1, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, 11, 10)
    util.Plot(threshold, 'Threshold Mask')
    fshift = dft_shift * threshold[:, :, None]
    util.Plot(cv.magnitude(fshift[:,:,0],fshift[:,:,1]), 'fft shift Masked')
    magnitude_spectrum = np.uint8(20*np.log(cv.magnitude(fshift[:,:,0],fshift[:,:,1])))
    util.Plot(magnitude_spectrum, 'Magnitude Masked')

    f_ishift = np.fft.ifftshift(fshift)
    img_back = cv.idft(f_ishift)
    img_back = cv.magnitude(img_back[:,:,0],img_back[:,:,1])
    util.Plot(img_back, 'Back')

真实拍摄场景优化方案

现有方案失效的核心原因是全局OTSU阈值生成的全图掩膜,仅能适配无畸变、线宽均匀、灰度一致的标准合成网格,真实场景下的透视倾斜、光照不均、笔迹与网格灰度接近的问题,会导致掩膜要么误删笔迹频域分量,要么漏删偏移的网格分量,可按以下步骤优化:

  • 预处理增加几何校正环节:存在透视倾斜的拍摄图像中,网格线对应的频域亮线会发生偏移、展宽,不再严格沿水平/垂直轴分布。先通过霍夫线检测定位网格边缘交点,计算透视变换矩阵将网格拉正,让网格的频域特征重新集中在水平、垂直轴的固定位置,大幅降低频域掩膜的设计难度。
  • 弃用全图OTSU二值掩膜,改用定向带阻滤波:网格校正完成后,其频域分量只会集中在水平、垂直轴线的固定间隔位置,直接针对这两个轴线的对应频段设计带阻滤波器即可,不需要对全频域做阈值分割,从根源上避免误删笔迹的频域分量。
  • 硬掩膜替换为高斯软掩膜:0-1取值的硬二值掩膜做频域滤波会产生明显的振铃伪影,在需要滤除的频域区域,用边缘高斯衰减的软掩膜做滤波,可大幅减少逆变换后图像上的伪影。
  • 增加光照归一化预处理:灰度转换后先做顶帽变换或对比度受限自适应直方图均衡,消除全局光照不均导致的网格线灰度差异,避免浅网格的频域分量幅值过低被漏检,同时减少深色区域笔迹与网格的灰度混叠。
  • 频域滤波后增加空间域后处理:逆变换返回空间域后,用小尺寸核对结果做形态学开运算,清理残留的细碎网格残段,同时保留手写笔迹的连通性。

内容的提问来源于stack exchange,提问作者vole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:01:02