文章目录
(原地TP)
不清除什么是颜色直方图和反向投影的同学可以先看这一篇
简介
基于颜色直方图的相似目标查找的主要流程为
- 将图像的颜色空间由
BGR转为HSV - 获取HSV颜色空间中关于
色调的颜色直方图(或者提取h,s双通道,计算二维颜色直方图) - 计算得到
颜色概率图 - 去除噪声(取高饱和度图像作为模板,去掉低饱和度的地方(可以理解为是比较暗的地方))
MeanShift匹配目标(取密度高的部位)
计算概率图像
# 对图像 读取,显示以及各种操作
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import warnings
warnings.filterwarnings('ignore')
导入原图,分别为目标图像(target)和感兴趣区域图像(roi)
分别提取它们的h和s通道,并分别计算它们的二维颜色直方图
# 源图片
target=cv.imread('image/baboon1.jpg')
hsvt=cv.cvtColor(target,cv.COLOR_BGR2HSV)
# 感兴趣区域
roi=cv.imread('image/baboon_face.jpg')
hsv=cv.cvtColor(roi,cv.COLOR_BGR2HSV)
# 提取了h,s两个通道,绘制二维直方图
## roi区域
M=cv.calcHist([hsv],[0,1],None,[180,256],[0,180,0,256])
## target区域
I=cv.calcHist([hsvt],[0,1],None,[180,256],[0,180,0,256])
# 打印原图片
plt.figure(figsize=[10,8])
plt.subplot(1,2,1)
plt.imshow(cv.cvtColor(target,cv.COLOR_BGR2RGB))
plt.title('target image')
plt.subplot(1,2,2)
plt.imshow(cv.cvtColor(roi,cv.COLOR_BGR2RGB))
plt.title('roi image')
plt.show()

经过计算之后我们得到了两个二维直方图
- M(
180x256,roi) - I(
180x256,target)
接着我们计算两者的比率R
h和s是target图像的h通道和s通道(为二维矩阵),将其展开之后
意味着对于原图片中每一个位置 a i , j a_{\ i,j} a

该博客介绍了如何基于颜色直方图进行相似目标查找,主要涉及图像去噪、MeanShift匹配目标等步骤。首先,将图像转换到HSV颜色空间并计算颜色直方图,接着通过计算概率图像和去噪来提取高饱和度区域。然后,应用MeanShift算法在概率图像上找到目标位置,实现目标跟踪。最后,提供了相关的Python代码示例。
最低0.47元/天 解锁文章
855

被折叠的 条评论
为什么被折叠?



