* This example shows how to measure the sharpness of an image using
* four characteristic quantities. These are the Blurriness (Auto-Correlation),
* the Image Difference of local neighborhoods (Difference), the Gradient
* and the range of Frequencies in an image (Band pass).
* These quantities are calculated for a sequence of images, which depict
* one object in different focal points. At one point the lense is in the right
* focus, which is also stressed by the peak of the four quantity functions
* (in the mid of all four functions).
*
dev_update_off ()
dev_close_window ()
*
read_image (Image, 'pcb_focus/pcb_focus_telecentric_001')
get_image_size (Image, Width, Height)
dev_close_window ()
OWFMaxExtent := 600
dev_open_window_fit_size (0, 0, Width, Height, OWFMaxExtent, OWFMaxExtent, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*
* Variables to tune sharpness measurement
Subsampling := 3
LowerBandPass := 0.1
UpperBandPass := 0.4
OffsetRow := 2
OffsetCol := 2
*
* Compute the four quantities of sharpness
FocusAutoCorrelationTuple := []
FocusBandpassTuple := []
FocusGradientTuple := []
FocusDifferenceTuple := []
NumImages := 121
for I := 1 to NumImages by 1
read_image (Image, 'pcb_focus/pcb_focus_telecentric_' + I$'.3d')
set_system ('flush_graphic', 'false')
dev_display (Image)
disp_message (WindowHandle, 'Measuring Sharpness of Image: ' + I$'03', 'window', -1, -1, 'white', 'false')
set_system ('flush_graphic', 'true')
disp_line (WindowHandle, -101, -101, -99, -99)
action_calculate_auto_correlation (Image, Subsampling, FocusAutoCorrelation)
FocusAutoCorrelationTuple := [FocusAutoCorrelationTuple,FocusAutoCorrelation]
action_calculate_bandpass (Image, LowerBandPass, UpperBandPass, Subsampling, FocusBandpass)
FocusBandpassTuple := [FocusBandpassTuple,FocusBandpass]
action_calculate_edge_gradient (Image, FocusGradient)
FocusGradientTuple := [FocusGradientTuple,FocusGradient]
action_calculate_image_difference (Image, OffsetRow, OffsetCol, Height, Width, FocusDifference)
FocusDifferenceTuple := [FocusDifferenceTuple,FocusDifference]
endfor
*
* Display the four sharpness functions
dev_display (Image)
dev_set_line_width (2)
disp_message (WindowHandle, 'Sharpness functions of an image sequence' + '\ntaken with varying focus adjustment', 'window', -1, -1, 'white', 'false')
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
Colors := ['blue','cyan','green','red']
disp_message (WindowHandle, ['Gradient','Difference','Bandpass','Auto Correlation'], 'window', 72, 72, Colors, 'false')
plot_tuple (WindowHandle, [1:NumImages], [FocusGradientTuple,FocusDifferenceTuple,FocusBandpassTuple,FocusAutoCorrelationTuple], 'Image', '', Colors, 'margin_bottom', 70)
图像清晰度计算
最新推荐文章于 2024-08-28 21:07:23 发布