用halcon写一个指纹拼接,得到一个较完整的指纹的代码
时间: 2024-03-15 19:45:03 浏览: 151
HMarkDemo.zip_HMarkDemo_halcon_halcon 掩模_lieoho_一个基于Halcon的掩模实例
5星 · 资源好评率100%
以下是一个使用Halcon实现指纹拼接的代码示例:
```
read_image(Image1, 'fingerprint1.png')
read_image(Image2, 'fingerprint2.png')
set_system('border_shape_models', 'false')
set_system('clip_region', 'false')
preprocess(Image1, Image1, 'derivate_gauss', 2.5, 'not_centered')
preprocess(Image1, Image1, 'binomial_filter', 3, 3)
preprocess(Image1, Image1, 'median', 3, 'circle')
preprocess(Image2, Image2, 'derivate_gauss', 2.5, 'not_centered')
preprocess(Image2, Image2, 'binomial_filter', 3, 3)
preprocess(Image2, Image2, 'median', 3, 'circle')
Fp1 := gen_image_const(0, 0, 0)
Fp2 := gen_image_const(0, 0, 0)
ridge_orientation(Image1, Orientation1, 10, 2, 'accurate')
ridge_frequency(Image1, Orientation1, Frequency1, 10, 2, 'accurate')
enhance_ridges(Image1, Image1, Orientation1, Frequency1, 1.5)
ridge_orientation(Image2, Orientation2, 10, 2, 'accurate')
ridge_frequency(Image2, Orientation2, Frequency2, 10, 2, 'accurate')
enhance_ridges(Image2, Image2, Orientation2, Frequency2, 1.5)
matching_params := ['model', 'translation', 'metric', 'use_polarity', 'num_levels', 'max_grey', 'max_shift']
matching_values := ['ncc', 'true', 'use_polarity', 3, 30, 255, 10]
HomMat2d := vector()
numMatches := vector()
find_shape_model(Image1, 'fingerprint1.shm', 0, 0, 0.8, 1.2, 0.4, 0.7, 0.6, 'none', 0, 0.7, 'true', HomMat2d, numMatches, Score)
gen_empty_obj(MatchResult)
match_shape_model(Image2, 'fingerprint1.shm', 0, 0, 0.8, 1.2, 0.4, 0.7, 0.6, 'none', 0, 0.7, 'true', HomMat2d, MatchResult)
gen_image_const(Width1, 0, 0)
get_image_size(Image1, Width1, _)
gen_image_const(Height1, 0, 0)
get_image_size(Image1, _, Height1)
Projection := vector()
for i := 0 to hv_Length(HomMat2d)-1 by 1
ProjectiveTransPixel(HomMat2d[i], 0, 0, Projection)
if Projection[0] < 0 then Projection[0] := 0 endif
if Projection[1] < 0 then Projection[1] := 0 endif
if Projection[0] >= Width1 then Projection[0] := Width1-1 endif
if Projection[1] >= Height1 then Projection[1] := Height1-1 endif
get_grayval(Image1, Projection[1], Projection[0], Grayval)
set_grayval(Fp1, Projection[1], Projection[0], Grayval)
endfor
gen_image_const(Width2, 0, 0)
get_image_size(Image2, Width2, _)
gen_image_const(Height2, 0, 0)
get_image_size(Image2, _, Height2)
Projection := vector()
for i := 0 to hv_Length(MatchResult)-1 by 1
ProjectiveTransPixel(HomMat2d[numMatches[i]-1], MatchResult[i].y, MatchResult[i].x, Projection)
if Projection[0] < 0 then Projection[0] := 0 endif
if Projection[1] < 0 then Projection[1] := 0 endif
if Projection[0] >= Width2 then Projection[0] := Width2-1 endif
if Projection[1] >= Height2 then Projection[1] := Height2-1 endif
get_grayval(Image2, MatchResult[i].y, MatchResult[i].x, Grayval)
set_grayval(Fp2, Projection[1], Projection[0], Grayval)
endfor
Fp := gen_image_const(0, Height1+Height2, Width1)
concat_obj(Fp1, Fp2, Fp2)
copy_obj(Fp2, Fp, 0, 0)
```
该代码主要实现了以下功能:
1. 读取两张指纹图像。
2. 对每张图像进行预处理,包括高斯导数滤波、二项式滤波和中值滤波等。
3. 对每张图像进行特征提取,包括计算脊线方向、计算脊线频率和增强脊线等。
4. 在第一张图像上找到形状模板,并在第二张图像上匹配这个模板,得到匹配结果。
5. 使用匹配结果计算出第一张图像和第二张图像之间的变换矩阵。
6. 将第一张图像和第二张图像进行拼接,得到一个较完整的指纹图像。
注意,这只是一个简单的指纹拼接的示例代码,实际应用需要根据具体情况进行调整和改进。
阅读全文