获取图像的焦点区域

时间:2014-04-03 07:21:53

标签: image-processing ios7 focus

我的问题是关于iOs中的图像世界。我的目标是以某种方式计算或获得图像的“对焦”区域。我想知道图像的哪个部分有焦点。你知道有没有办法做到这一点?也许与对比?我经常搜索,但没有找到任何东西。

2 个答案:

答案 0 :(得分:0)

您必须将图像划分为合适的区域并计算每个区域的渐变图像。尖锐区域将具有高梯度值,而模糊将具有低梯度值。

我在Python中包含一个示例,但我相信您可以将其转换为您选择的语言。 我已将渐变计算应用于整个图像,但您只需将图像im替换为窗口。

下面是一个蒙太奇,显示迭代时的模糊效果和每次迭代时的平均梯度值。在该示例中,可以在第一图像处找到最大梯度值,并且该最大梯度值也是最清晰的图像(即,在焦点中)。 enter image description here

enter image description here

import cv2
import matplotlib.pylab as pl

# Load the image
original_image = cv2.imread('lena.jpg')

# Generate the smoothing kernel
kernel = cv2.getGaussianKernel(9,1)

# I played around with this value and found that there was not
# much change after 10 iteration
num_of_iter = 9

# Define containers
average_gradient = []
blurred_imlist = []

blurred_imlist.append(original_image)


# Blur the image iteratively and use the output from the previous iteration as
# input to the next
for i in range(0,num_of_iter):
    # Get the blurred image from the previous step
    im = blurred_imlist[i]

    # Calculate the gradient
    sobelx = cv2.Sobel(im,cv2.CV_64F,1,0,ksize=5)
    sobely = cv2.Sobel(im,cv2.CV_64F,0,1,ksize=5)

    abs_sobel_x = cv2.convertScaleAbs(sobelx) # converting back to uint8
    abs_sobel_y = cv2.convertScaleAbs(sobely)

    # Combine the two gradients with equal weight
    dst = cv2.addWeighted(abs_sobel_x,0.5,abs_sobel_y,0.5,0)

    # Calculate the average gradient for the image
    # I convert it to a numpy array for ease of calculation
    average_gradient.append(pl.asarray(dst).mean())



    # Blur it and this as input to the next iteration
    blurred_im = cv2.filter2D(im, -1, kernel)
    blurred_imlist.append(blurred_im)


# The index with the maximum gradient value is your in-focus image
infocus_image = pl.argmax(pl.asarray(average_gradient))
print(infocus_image)    

0

答案 1 :(得分:0)

锐利主体的离焦图像与模糊主体的对焦图像相同,因此在一般情况下没有算法可以做到这一点。

如果您假设您的对焦区域具有一定量的微对比度,那么您可以简单地找到与其邻居不同的所有像素超过设定的阈值。 (计算像素值减去四个相邻像素的平均值。这称为梯度或拉普拉斯算子的发散。)一些视频记录系统这样做是为了帮助操作员找到焦点。

如果您有一系列具有不同焦距的图像,则可以为每个图像计算上述图像,以找出哪个图像具有最佳焦点。这就是许多小型相机中AF系统的工作原理。