圖像顯著性檢測算法之一:LC Algorithm
計(jì)算某個(gè)像素在整個(gè)圖像上的全局對(duì)比度咏窿,即該像素與圖像中其他所有像素在顏色上的距離之和作為該像素的顯著值徙融。
圖像?II?中某個(gè)像素?IkIk?的顯著值計(jì)算如下:
其中IiIi的取值范圍為?[0,255][0,255], 即為灰度值惩猫。
上式等于:
NN表示圖像中像素的數(shù)量瘸味。
給定一張圖像切端,每個(gè)像素IkIk的顏色值已知型将。假定Ik=amIk=am,則上式可進(jìn)一步重構(gòu):
其中荐虐,fnfn表示圖像中第nn個(gè)像素的頻數(shù)七兜,以直方圖的形式表示。
直接調(diào)用OpenCV接口福扬,實(shí)現(xiàn)圖像中像素的直方圖統(tǒng)計(jì)腕铸,即統(tǒng)計(jì)[0,255][0,255]中每個(gè)灰度值的數(shù)量。
# 直方圖铛碑,統(tǒng)計(jì)圖像中每個(gè)灰度值的數(shù)量
hist_array = cv2.calcHist([image_gray], [0],None, [256], [0.0,256.0])
計(jì)算像素與其他所有像素在灰度值上的距離狠裹。
defcal_dist(hist):
? ? dist = {}
forgrayinrange(256):
value =0.0
forkinrange(256):
value += hist[k][0] * abs(gray - k)
? ? ? ? dist[gray] = value
returndist
將灰度值圖像中的像素值更新為對(duì)比度值(即距離度量)。
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
原圖:
顯著圖: