HALCON影象處理,清晰度處理/自動對焦處理方法
阿新 • • 發佈:2022-05-28
1、介紹
影象清晰度是衡量影象質量的一個重要指標,對於相機來說,其一般工作在無參考影象的模式下,所以在拍照時需要進行對焦的控制。對焦不準確,影象就會變得比較模糊不清晰。相機對焦時通過一些清晰度評判指標,控制鏡頭與CCD的距離,使影象成像清晰。一般對焦時有一個調整的過程,影象從模糊到清晰,再到模糊,確定清晰度峰值,再最終到達最清晰的位置。
常見的影象清晰度評價一般都是基於梯度的方法,本文將介紹五種簡單的評價指標,分別是Brenner梯度法、Tenegrad梯度法、laplace梯度法、方差法、能量梯度法。
2、Halcon程式碼
①、Tenegrad函式
1 //Tenegrad梯度法 2 sobel_amp(Image, EdgeAmplitude, 'sum_sqrt', 3) 3 min_max_gray(EdgeAmplitude, EdgeAmplitude, 0, Min, Max, Range) 4 threshold(EdgeAmplitude, Region1, 20, 255) 5 region_to_bin(Region1, BinImage, 1, 0, Width, Height) 6 mult_image(EdgeAmplitude, BinImage, ImageResult4, 1, 0) 7 mult_image(ImageResult4, ImageResult4, ImageResult, 1, 0) 8 intensity(ImageResult, ImageResult, Value, Deviation)
②、方差函式
1 //方差法 2 region_to_mean(ImageReduced, Image, ImageMean) 3 convert_image_type(ImageMean, ImageMean, 'real') 4 convert_image_type(Image, Image, 'real') 5 sub_image(Image, ImageMean, ImageSub, 1, 0) 6 mult_image(ImageSub, ImageSub, ImageResult, 1, 0) 7 intensity(ImageResult, ImageResult, Value, Deviation)
③、能量函式
1 //能量梯度函式
2 crop_part(Image, ImagePart00, 0, 0, Width-1, Height-1)
3 crop_part(Image, ImagePart01, 0, 1, Width-1, Height-1)
4 crop_part(Image, ImagePart10, 1, 0, Width-1, Height-1)
5 convert_image_type(ImagePart00, ImagePart00, 'real')
6 convert_image_type(ImagePart10, ImagePart10, 'real')
7 convert_image_type(ImagePart01, ImagePart01, 'real')
8 sub_image(ImagePart10, ImagePart00, ImageSub1, 1, 0)
9 mult_image(ImageSub1, ImageSub1, ImageResult1, 1, 0)
10 sub_image(ImagePart01, ImagePart00, ImageSub2, 1, 0)
11 mult_image(ImageSub2, ImageSub2, ImageResult2, 1, 0)
12 add_image(ImageResult1, ImageResult2, ImageResult, 1, 0)
13 intensity(ImageResult, ImageResult, Value, Deviation)
④、Brenner函式
1 //Brenner梯度法
2 crop_part(Image, ImagePart00, 0, 0, Width, Height-2)
3 convert_image_type(ImagePart00, ImagePart00, 'real')
4 crop_part(Image, ImagePart20, 2, 0, Width, Height-2)
5 convert_image_type(ImagePart20, ImagePart20, 'real')
6 sub_image(ImagePart20, ImagePart00, ImageSub, 1, 0)
7 mult_image(ImageSub, ImageSub, ImageResult, 1, 0)
8 intensity(ImageResult, ImageResult, Value, Deviation)
⑤、Laplace函式
1 //拉普拉斯梯度函式
2 laplace(Image, ImageLaplace4, 'signed', 3, 'n_4')
3 laplace(Image, ImageLaplace8, 'signed', 3, 'n_8')
4 add_image(ImageLaplace4, ImageLaplace4, ImageResult1, 1, 0)
5 add_image(ImageLaplace4, ImageResult1, ImageResult1, 1, 0)
6 add_image(ImageLaplace8, ImageResult1, ImageResult1, 1, 0)
7 mult_image(ImageResult1, ImageResult1, ImageResult, 1, 0)
8 intensity(ImageResult, ImageResult, Value, Deviation)
1、介紹
影象清晰度是衡量影象質量的一個重要指標,對於相機來說,其一般工作在無參考影象的模式下,所以在拍照時需要進行對焦的控制。對焦不準確,影象就會變得比較模糊不清晰。相機對焦時通過一些清晰度評判指標,控制鏡頭與CCD的距離,使影象成像清晰。一般對焦時有一個調整的過程,影象從模糊到清晰,再到模糊,確定清晰度峰值,再最終到達最清晰的位置。
常見的影象清晰度評價一般都是基於梯度的方法,本文將介紹五種簡單的評價指標,分別是Brenner梯度法、Tenegrad梯度法、laplace梯度法、方差法、能量梯度法。
2、Halcon程式碼
①、Tenegrad函式
1 //Tenegrad梯度法
2 sobel_amp(Image, EdgeAmplitude, 'sum_sqrt', 3)
3 min_max_gray(EdgeAmplitude, EdgeAmplitude, 0, Min, Max, Range)
4 threshold(EdgeAmplitude, Region1, 20, 255)
5 region_to_bin(Region1, BinImage, 1, 0, Width, Height)
6 mult_image(EdgeAmplitude, BinImage, ImageResult4, 1, 0)
7 mult_image(ImageResult4, ImageResult4, ImageResult, 1, 0)
8 intensity(ImageResult, ImageResult, Value, Deviation)
②、方差函式
1 //方差法
2 region_to_mean(ImageReduced, Image, ImageMean)
3 convert_image_type(ImageMean, ImageMean, 'real')
4 convert_image_type(Image, Image, 'real')
5 sub_image(Image, ImageMean, ImageSub, 1, 0)
6 mult_image(ImageSub, ImageSub, ImageResult, 1, 0)
7 intensity(ImageResult, ImageResult, Value, Deviation)
③、能量函式
1 //能量梯度函式
2 crop_part(Image, ImagePart00, 0, 0, Width-1, Height-1)
3 crop_part(Image, ImagePart01, 0, 1, Width-1, Height-1)
4 crop_part(Image, ImagePart10, 1, 0, Width-1, Height-1)
5 convert_image_type(ImagePart00, ImagePart00, 'real')
6 convert_image_type(ImagePart10, ImagePart10, 'real')
7 convert_image_type(ImagePart01, ImagePart01, 'real')
8 sub_image(ImagePart10, ImagePart00, ImageSub1, 1, 0)
9 mult_image(ImageSub1, ImageSub1, ImageResult1, 1, 0)
10 sub_image(ImagePart01, ImagePart00, ImageSub2, 1, 0)
11 mult_image(ImageSub2, ImageSub2, ImageResult2, 1, 0)
12 add_image(ImageResult1, ImageResult2, ImageResult, 1, 0)
13 intensity(ImageResult, ImageResult, Value, Deviation)
④、Brenner函式
1 //Brenner梯度法
2 crop_part(Image, ImagePart00, 0, 0, Width, Height-2)
3 convert_image_type(ImagePart00, ImagePart00, 'real')
4 crop_part(Image, ImagePart20, 2, 0, Width, Height-2)
5 convert_image_type(ImagePart20, ImagePart20, 'real')
6 sub_image(ImagePart20, ImagePart00, ImageSub, 1, 0)
7 mult_image(ImageSub, ImageSub, ImageResult, 1, 0)
8 intensity(ImageResult, ImageResult, Value, Deviation)
⑤、Laplace函式
1 //拉普拉斯梯度函式
2 laplace(Image, ImageLaplace4, 'signed', 3, 'n_4')
3 laplace(Image, ImageLaplace8, 'signed', 3, 'n_8')
4 add_image(ImageLaplace4, ImageLaplace4, ImageResult1, 1, 0)
5 add_image(ImageLaplace4, ImageResult1, ImageResult1, 1, 0)
6 add_image(ImageLaplace8, ImageResult1, ImageResult1, 1, 0)
7 mult_image(ImageResult1, ImageResult1, ImageResult, 1, 0)
8 intensity(ImageResult, ImageResult, Value, Deviation)