图片资源
链接:https://pan.baidu.com/s/1J_wmjQgan3lxblZr-qHQgg
提取码:klin
处理流程
1、傅里叶变换 获取光谱图
2、获取内圈菱形光谱区域(非文字区)
3、获取外圈菱形光谱区域(非文字区)
4、组合内外圈 光谱图 并将区域置0 (滤除非文字区域(背景纹理))
5、逆傅里叶变换 计算 滤波后的图片
6、原图 - 滤波后图(无背景纹理图) = 背景纹理图
7、显示去除文字图片
完整代码
* 通过傅里叶变换 去除图片中的文字
dev_update_off ()
dev_clear_window ()
Scale := [1.0, 0.65]
MinGray := [50, 100]
for Index := 0 to 1 by 1
**** 1、读取图片 *********************
read_image (Image, './img/plan_'+ (Index + 1) $'02')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width * Scale[Index], Height * Scale[Index], 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_part (0, 0, Height-1, Width-1)
dev_display (Image)
disp_message (WindowHandle, '原始图片', 'window', 12, 12, 'black', 'true')
**** 2、傅里叶变换 获取光谱图 *********************
* 设置 FFT的处理速度
optimize_fft_speed (Width, Height, 'standard')
* 图片傅里叶变换
* to_freq 图片转换为频域 -1 指数符合 sqrt 归一化因子 dc_center 绘制的位置 'complex' 输出图片的类型
fft_generic (Image, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 显示傅里叶光谱图
dev_open_window (0, 0, Width * Scale[Index] + 7, Height * Scale[Index] + 7, 'black', WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_set_part (0, 0, Height-1, Width-1)
dev_display (ImageFFT)
disp_message (WindowHandle1, '傅里叶光谱图', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle1, 'black', 'true')
stop ()
**** 3、获取内圈菱形区域 *********************
* fft图片实部与虚部 转为实数
power_real (ImageFFT, PowerSpectrum)
* 二值滤波平滑
binomial_filter (PowerSpectrum, ImageBinomial, 9, 9)
* 二值化
threshold (ImageBinomial, Region, MinGray[Index], 999999)
* 连通域分析与筛选
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 200)
* 合并挑选区域
union1 (SelectedRegions, RegionUnion)
* 聚焦周围区域
reduce_domain (ImageBinomial, RegionUnion, ImageReduced)
* 使用局部最大值
local_max (ImageReduced, LocalMaxima1)
* 菱形点 组合成区域
shape_trans (LocalMaxima1, RegionTrans, 'convex')
**** 4、放大外圈 获取外菱形处理区域 *********************
hom_mat2d_identity (HomMat2DIdentity)
* 区域放大矩阵 2.1
hom_mat2d_scale (HomMat2DIdentity, 2.1, 2.1, Height/2, Width/2, HomMat2DScale)
* 区域放大
affine_trans_region (RegionTrans, RegionTrans1, HomMat2DScale, 'nearest_neighbor')
* 区域放大矩阵 1.9
hom_mat2d_scale (HomMat2DIdentity, 1.9, 1.9, Height/2, Width/2, HomMat2DScale)
* 区域放大
affine_trans_region (RegionTrans, RegionTrans2, HomMat2DScale, 'nearest_neighbor')
* 2.1 - 1.9 获取外菱形区域
difference (RegionTrans1, RegionTrans2, RegionDifference)
* 聚焦外菱形区域
reduce_domain (ImageBinomial, RegionDifference, ImageReduced)
* 二值化
threshold (ImageReduced, Region, 15, 100000)
* 再次聚焦二值化后区域
reduce_domain (ImageReduced, Region, ImageReduced)
* 外圈局部最大值
local_max (ImageReduced, LocalMaxima2)
**** 5、合并内外菱形区域 获取滤波后的频域图 *********************
* 合并内外菱形区域
union2 (LocalMaxima1, LocalMaxima2, RegionUnion)
* 圆形膨胀算法
dilation_circle (RegionUnion, RegionDilation, 15.5)
* 频域图 过滤内外菱形区域(置0)
paint_region (RegionDilation, ImageFFT, ImageFFTFiltered, 0, 'fill')
dev_display (ImageFFT)
dev_set_draw ('margin')
dev_display (RegionDilation)
disp_message (WindowHandle1, '去非除文字频域区域', 'window', 12, 12, 'black', 'true')
disp_cont_message(WindowHandle1, 'black', 'true')
stop ()
**** 6、逆向傅里叶变换(去除背景纹理频域图) 转为byte图 *********************
fft_generic (ImageFFTFiltered, ImageFiltered, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')
dev_display (ImageFiltered)
disp_message (WindowHandle1, '去除背景纹理图', 'window', 12, 12, 'black', 'true')
**** 7、 计算背景纹理图(无文字) *********************
* 原始图片 - 无纹理文字图 = 背景纹理图
sub_image (Image, ImageFiltered, ImageTexture, 1, 128)
* 显示并关闭 窗体
dev_open_window (0, 2 * (Width * Scale[Index]) + 14, Width * Scale[Index], Height * Scale[Index], 'black', WindowHandle2)
set_display_font (WindowHandle2, 14, 'mono', 'true', 'false')
dev_set_part (0, 0, Height - 1, Width - 1)
dev_display (ImageTexture)
disp_message (WindowHandle2, 'Removed texture', 'window', 12, 12, 'black', 'true')
if (Index < 1)
disp_cont_message(WindowHandle2, 'black', 'true')
stop ()
dev_close_window ()
dev_close_window ()
dev_close_window ()
endif
endfor