emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
emphasize增强图像的高频区域(边缘和角)。
得到的图像看起来更清晰。
首先,此函数执行低通滤波(mean_image)。
用得到的灰度值(mean)和原始灰度值(orig)计算,
得到的结果灰度值(res)如下:
res := round((orig - mean) * Factor) + orig
Factor作为对比增长的度量。
分频由滤波器矩阵的大小决定:
矩阵越大,分频越低。
作为边缘处理,灰度值在图像边缘镜像。
灰色值的溢出和/或下溢被剪裁。
例程:
read_image(Image,'mreut')
dev_display (Image)
gen_circle (Circle, 200, 200, 100.5)
reduce_domain(Image,Circle,Mask)
emphasize(Mask,Sharp,7,7,2.0)
dev_display (Sharp)
1.coherence_enhancing_diff(Image : ImageCED : Sigma, Rho, Theta, Iterations : )
coherence_enhancing_diff对输入图像Image 进行各向异性扩散,以提高图像中包含的图像结构的相干度。
特别是,非连续图像边缘是通过扩散连接的,而不是垂直于它们的控制方向平滑。
参数
Image 输入图像
ImageCED 输出图像
Sigma 导数算子的平滑。
Rho 扩散系数的平滑。
Theta 时间步长。
Iterations 迭代次数。
例程:
*例程演示如何使用coherence_enhancing_diff通过连接指纹线的断开部分来增强指纹图像。
read_image (Image, 'fingerprint')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width * 2, Height * 2, 'black', WindowHandle)
dev_display (Image)
stop ()
coherence_enhancing_diff (Image, ImageCED, 0.5, 4, 0.5, 50)
dev_display (ImageCED)
2.equ_histo_image(Image : ImageEquHisto : : )
equ_histo_image提高对比,起点是输入图像的直方图
对字节图像进行如下简单的灰度值变换f(g):
h(x)表示灰度值x出现的相对频率。
对于uint2图像,唯一的区别是255被替换为不同的最大值。
如果设置了此值,则最大值由与输入图像一起存储的有效位的数量计算。
如果没有,则使用系统参数'int2_bits'的值(参见set_system),
如果设置了该值(即,与-1不同)。
如果没有设置这两个值,则将有效位的数量设置为16。
这种转换使累积直方图线性化。
原始直方图中的极大值被“spreaded”,从而增加了具有这些频繁出现的灰度值的图像区域的对比度。
假设均匀区域接收到更容易看到的结构。
另一方面,当然,图像中的噪声也相应增加。
原始直方图中的极小值是双重“compressed”的。
转换后的直方图包含间隙,但是其余使用的灰度值大约以相同的频率出现(“histogram equalization”)。
例程:
read_image (Vessel, 'vessel')
equ_histo_image (Vessel, ImageEquHisto)
3.illuminate(Image : ImageIlluminate : MaskWidth, MaskHeight, Factor : )
illuminate用于提高对比度。
图像中非常暗的部分被“illuminated”得更强烈,非常亮的部分被“darkened”。
若orig为原始灰度值,
mean为通过算子mean_image(掩码大小MaskHeight x MaskWidth)处理后的灰度值。
对于字节图像,val等于127,
对于int2图像和uint2图像,val等于中值。
得到的灰度值是新的: new = round ( (val - mean) * Factor + orig ).
低通应该有相当大的尺寸(30 x 30到200 x 200)。合理的参数组合可以是:
Height Width Factor
---------------------
40 40 0.55
100 100 0.7
150 150 0.8
也就是说,选择的低通掩模越大,因子也应该越大。
应该注意以下“spotlight effect”:
例如,如果一个黑暗的物体在光墙的前面,
那么该物体以及已经在物体轮廓附近的光墙都由操作符illuminate照亮。
这大致相当于物体被强光照射时产生的效果。
同样的道理也适用于背景较暗的物体。
然而,在这种情况下,虚构的“spotlight”会使物体变暗。
例程:
read_image(Image,'fabrik')
dev_display (Image)
illuminate(Image,Better,40,40,0.55)
dev_display (Better)
5.mean_curvature_flow(Image : ImageMCF : Sigma, Theta, Iterations : )
函数应用平均曲率流或本征热方程
到由图像Image 在时间t0=0定义的灰度值函数中。
也就是将平均曲率流应用于图像Image 。
例程:
* 例程序演示如何使用mean_ature_flow来增强血管造影图像,在平滑背景噪声的同时保留边缘信息。
dev_close_window ()
dev_open_window (0, 0, 400, 400, 'black', WindowHandle)
read_image (Image, 'angio-part')
dev_display (Image)
stop ()
mean_curvature_flow (Image, ImageMCF, 0.5, 0.5, 10)
dev_display (ImageMCF)
6.scale_image_max(Image : ImageScaleMax : : )
scale_image_max计算最小值和最大值,并将图像缩放到字节图像的最大值范围。
这样就充分利用了动态(值范围)。
不同灰度的数量没有变化,但总体上增强了视觉印象。
“real”、“int2”、“uint2”、“int4”和“int8”类型的图像的灰度值被缩放到0到255之间,
并作为“byte”图像返回。
例程:
read_image (Vessel, 'vessel')
scale_image_max (Vessel, ImageScaleMax)
7.shock_filter(Image : SharpenedImage : Theta, Iterations, Mode, Sigma : )
shock_filter将一个冲击过滤器应用于输入图像Image ,以锐化其中包含的边缘。
冲击滤波器的原理是将图像的灰度值通过膨胀和侵蚀从图像的两侧向边缘传输,
满足微分方程
函数中u由在时间t0=0图像Image 的灰度值定义。
将离散化方程求解时,迭代Iterations,步长Theta,
使得输出图像SharpenedImage 在时间Iterations*Theta包含灰度值函数。
例程:
*例程演示如何使用shock_filter锐化散焦图像。
dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
dev_set_part (0, 0, 479, 639)
read_image (Image, 'datacode/ecc200/ecc200_cpu_015')
* 由于图像包含交错效果,先删除它们。
fill_interlace (Image, ImageFilled, 'odd')
dev_display (ImageFilled)
stop ()
*使用冲击过滤器。在大多数情况下,Mode = 'canny'更可取,因为它倾向于拉直边缘。
*然而,在本例中,我们希望尽可能保留数据码模块的边角。这是通过使用Mode = 'laplace'来实现的。
shock_filter (ImageFilled, SharpenedImage, 0.5, 10, 'laplace', 1.5)
dev_display (SharpenedImage)
stop ()
dev_set_part (160, 330, 369, 609)
dev_display (ImageFilled)
stop ()
dev_display (SharpenedImage)
|