QQ登录

只需一步,快速开始

halocn inpainting_aniso函数

[ 复制链接 ]
inpainting_aniso(Image, Region : InpaintedImage : Mode, Contrast, Theta, Iterations, Rho : )
inpainting_aniso根据Perona和Malik的模型使用各向异性扩散,
延长相交于区域Region 边界的图像边缘,并将其连接到区域Region 内。
有了这个,区域边缘的结构将与周围的图像矩阵相一致,
因此在输入图像中,一个被称为inpainting的错误或不需要的物体的遮挡,
对人来说是不那么可见的,因为没有明显的人为缺陷或污点。


将图像作为灰色值函数u,该算法是偏微分方程的离散化
2019-06-06_174510.jpg


初始值u=u0由图像在 t0=0时定义。方程以时间步长Theta的迭代 Iterations 进行迭代,
使得InpaintedImage的输出图像包含 Iterations * Theta .的灰度值函数。


各向异性扩散,也称为非线性各向同性扩散,其主要目的是在保持图像边缘的同时,
消除恒定图像块中的图像噪声。
通过对相邻像素之间灰度值差异大小的阈值Contrast,实现边缘和恒定面片之间的区别。
Contrast被称为对比度参数,缩写为字母C。
如果边缘信息通过平滑边缘振幅矩阵分布在已有边缘的环境中,
则可以继续将边缘输入计算区域Region
此平滑过程的标准偏差由参数rho确定。




所使用的算法基本上与各向异性扩散滤波器中的anisotropic_diffusion相同,
但这里的边界处理不是通过镜像区域 Region边界处的灰度值来完成的。
相反,该程序仅适用于与图像Image矩阵边界保持至少3个像素距离的区域,
因为该区域Region周围的灰度值用于定义各自微分方程的边界条件,
从而确保与区域Region的邻域一致。
请注意,Inpainting进度仅限于输入图像的ROI中包含的像素。
如果ROI不包括整个区域Region,则使用Region和ROI交叉点周围的带定义边界值。


扩散过程的结果取决于输入图像计算区域的灰度值。
必须指出的是,已经存在的图像边缘保留在区域 Region内。
特别是,这适用于 Region边界处的灰度值跳跃,例如,可以从以前的具有恒定灰度值的绘制中获得。
如果要使用该程序进行修正,建议首先应用harmonic_interpolation,以去除计算区域内所有不需要的边,
并最小化相邻像素之间的灰度差,除非输入图像已经包含了应保留的区域Region内的信息。


变量扩散系数g可以选择为不同的单调递减函数,取值范围在0到1之间,决定扩散过程对边缘的响应。
参数Mode,可以选择以下功能:


2019-06-06_161206.jpg
通过将模式设置为“parabolic”来选择函数g1,保证了相关微分方程是抛物型的,从而使问题存在一个完备的理论
,并且对于任意步长Theta都是稳定的。
然而,在这种情况下,即使在振幅大于c的情况下,仍然存在轻微的扩散。


2019-06-06_161206.jpg
在《Perona》和《Malik》的出版中,对于Mode的选择“Perona - Malik”,g1并不具有理论性质,
但在实践中已经被证明是足够稳定的,因此得到了广泛的应用。
理论上的不稳定性导致了强边的轻微锐化。


2019-06-06_161206.jpg
由Weickert提出的常数C=3.31488的函数g3,可通过设置模式为“Weickert”进行选择,是对边缘锐化g2的改进。
平滑和锐化之间的过渡在x = c^2处发生得非常突然。


此外,Mode=“shock”可选择各向异性扩散的对比不变修正。
在该变量中,边的生成不是通过扩散系数g的变化来实现的,
而是通过常系数g=1来实现的,因此采用了各向同性扩散。
此外,一种冲击过滤器的类型 2019-06-06_180511.jpg 被应用。
这就像负扩散系数一样,会使边缘锐化,但与绝对值 2019-06-06_180702.jpg 无关。
在这种模式下,Contrast 不具有对比度参数的含义,而是指定在每个迭代步骤中应用的扩散和冲击过滤器部分之间的比例。
因此,值0对应于纯各向同性扩散,就像在操作符isotropic_diffusion中使用的那样。
该参数的缩放方式使扩散和锐化在对比度=1时相互抵消。
不应使Contrast>1,因为它会使算法不稳定。


例程:
*程序展示如何使用inpainting_aniso来填充无法用立体重建的区域
*例如,由于闭塞或缺少纹理。会看到inpainting_aniso创建了一个具有相对锐利边缘的重构。
dev_close_window ()
dev_open_window (0, 0, 672, 484, 'black', WindowHandle)
gen_cam_par_area_scan_division (0.0130507774353, -665.817817207, 1.4803417027e-5, 1.48e-5, 155.89225769, 126.70664978, 320, 240, CamParamL)
gen_cam_par_area_scan_division (0.0131776504517, -731.860636733, 1.47997569293e-5, 1.48e-5, 162.98210144, 119.301040649, 320, 240, CamParamR)
create_pose (0.153573, -0.003734, 0.0447354, 0.174289, 319.843388, 359.894955, 'Rp+T', 'gba', 'point', RelPose)
gen_binocular_rectification_map (MapL, MapR, CamParamL, CamParamR, RelPose, 1, 'geometric', 'bilinear', RectCamParL, RectCamParR, CamPoseRectL, CamPoseRectR, RectLPosRectR)
read_image (ImageL, 'stereo/board/board_l_01')
read_image (ImageR, 'stereo/board/board_r_01')
emphasize (ImageL, ImageL, 7, 7, 1)
emphasize (ImageR, ImageR, 7, 7, 1)
map_image (ImageL, MapL, ImageRectifiedL)
map_image (ImageR, MapR, ImageRectifiedR)
* 确定距离图像。
binocular_distance (ImageRectifiedL, ImageRectifiedR, DistanceImage, ScoreImageDistance, RectCamParL, RectCamParR, RectLPosRectR, 'ncc', 17, 17, 5, 10, 40, 1, 0.1, 'left_right_check', 'interpolation')
get_domain (DistanceImage, Domain)
complement (Domain, RegionInpaintingFull)
full_domain (DistanceImage, DistanceImageFull)
harmonic_interpolation (DistanceImageFull, RegionInpaintingFull, HarmonicDistanceImage, 0.00001)
get_image_size (DistanceImage, Width, Height)
clip_region (RegionInpaintingFull, RegionInpainting, 3, 3, Height - 4, Width - 4)
inpainting_aniso (HarmonicDistanceImage, RegionInpainting, InpaintedDistanceImage, 'shock', 0.5, 0.5, 60, 3)
dev_display (DistanceImage)
dev_display (InpaintedDistanceImage)









回复

使用道具 举报

快速回复 返回列表 客服中心 搜索