图像显著性检测算法之一:LC Algorithm
计算某个像素在整个图像上的全局对比度,即该像素与图像中其他所有像素在颜色上的距离之和作为该像素的显著值。
图像 II 中某个像素 IkIk 的显著值计算如下:
其中IiIi的取值范围为 [0,255][0,255], 即为灰度值。
上式等于:
NN表示图像中像素的数量。
给定一张图像,每个像素IkIk的颜色值已知。假定Ik=amIk=am,则上式可进一步重构:
其中,fnfn表示图像中第nn个像素的频数,以直方图的形式表示。
直接调用OpenCV接口,实现图像中像素的直方图统计,即统计[0,255][0,255]中每个灰度值的数量。
# 直方图,统计图像中每个灰度值的数量
hist_array = cv2.calcHist([image_gray], [0],None, [256], [0.0,256.0])
计算像素与其他所有像素在灰度值上的距离。
defcal_dist(hist):
dist = {}
forgrayinrange(256):
value =0.0
forkinrange(256):
value += hist[k][0] * abs(gray - k)
dist[gray] = value
returndist
将灰度值图像中的像素值更新为对比度值(即距离度量)。
foriinrange(image_width):
forjinrange(image_height):
temp = image_gray[j][i]
image_gray_copy[j][i] = gray_dist[temp]
image_gray_copy = (image_gray_copy - np.min(image_gray_copy)) / (np.max(image_gray_copy) - np.min(image_gray_copy))
代码链接: https://github.com/asdfv1929/Saliency_LC_Algorithm
原图:
显著图:
网友评论