
前面我们学习了均值漂移算法。这里介绍下均值漂移不连续性保持滤波。设xi是d维原始图像中的点
1、对于每个图像像素xi,初始化步数j=1,yi,1=xi。
2、计算yi,j+1,直到收敛于yi,con。
3、在xi处滤波后的像素值被赋值为收敛点 yi,con的像素值
OpenCV提供了pyrMeanShiftFiltering。
void pyrMeanShiftFiltering(InputArray src, OutputArray dst, double sp, double sr, int maxLevel=1, TermCriteria termcrit=
TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5, 1) )
参数
src —— 源8位3通道图像。
dst —— 与源格式和大小相同的目标图像。
sp —— 空间半径。
sr —— 颜色距离。
maxLevel —— 选填。金字塔的最大级别。
termcrit —— 选填。终止标准:何时停止均值漂移迭代。
pyrMeanShiftFiltering会多出一个maxLevel参数。当maxLevel>0时,将建立maxLevel+1级别的高斯金字塔(gaussian pyramid),并且上面(均值偏移)的过程首先在最小的层上运行。之后,结果将传递到较大的图层,并且仅在图层颜色与金字塔的较低分辨率图层(上一层)相差超过自定义颜色距离的那些像素上再次运行迭代。这使得颜色区域的边界更加清晰。
#include <opencv2/opencv.hpp>using namespace cv;
void callback(int, void*);int spatialRad = 50; // 空间窗口半径
int colorRad = 50; // 色彩距离
int maxPyrLevel = 2; // 高斯金字塔层数int main()
{Mat img = imread("D:\TestData\lena.jpg"); //读入图像 imshow("srcImg", img);// 拉动条namedWindow("param");createTrackbar("sr", "param", &spatialRad, 50, callback, (void *)&img);createTrackbar("cr", "param", &colorRad, 50, callback, (void *)&img);// 初始化callback(0, (void *)&img);// 等待退出waitKey(0);destroyAllWindows();return 0;
}// 拖动条call函数
void callback(int, void* param) {Mat &img = *(Mat*)param; // 指针类变换Mat res; // 结果图pyrMeanShiftFiltering(img, res, spatialRad, colorRad, maxPyrLevel); // 均值漂移滤波// 显示imshow("Result", res);
}
本文发布于:2024-02-27 17:56:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1709109197114081.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |