图像显著性检测 LC算法

图像显著性检测算法之一:LC Algorithm

基本思想

计算某个像素在整个图像上的全局对比度,即该像素与图像中其他所有像素在颜色上的距离之和作为该像素的显著值。

显著值计算

图像 $I$ 中某个像素 $I_k$ 的显著值计算如下:
CBeaKe.png
其中$I_i$的取值范围为 $[0, 255]$, 即为灰度值。

上式等于:
CBer5t.png
$N$表示图像中像素的数量。

给定一张图像,每个像素$I_k$的颜色值已知。假定$I_k = a_m$,则上式可进一步重构:
CBe68f.png
其中,$f_n$表示图像中第$n$个像素的频数,以直方图的形式表示。

代码实现

直接调用OpenCV接口,实现图像中像素的直方图统计,即统计$[0, 255]$中每个灰度值的数量。

1
2
# 直方图,统计图像中每个灰度值的数量
hist_array = cv2.calcHist([image_gray], [0], None, [256], [0.0, 256.0])

计算像素与其他所有像素在灰度值上的距离。

1
2
3
4
5
6
7
8
def cal_dist(hist):
dist = {}
for gray in range(256):
value = 0.0
for k in range(256):
value += hist[k][0] * abs(gray - k)
dist[gray] = value
return dist

将灰度值图像中的像素值更新为对比度值(即距离度量)。

1
2
3
4
5
for i in range(image_width):
for j in range(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

结果展示

原图:
CBeOr4.png

显著图:
CBeLMF.png

------------- 本 文 结 束 感 谢 您 的 阅 读 -------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%