C++如何实现中值滤波


这篇文章主要介绍了C++如何实现中值滤波的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现中值滤波文章都会有所收获,下面我们一起来看看吧。中值滤波器是一种非线性滤波器,或者叫统计排序滤波器。适用对象:带椒盐噪声的图像由于椒盐噪声像素值与原图像素值没有关联,随机性较大,因此使用中值滤波可有效滤掉噪声。中值滤波需要对像素值进行排序,因此首先写一个冒泡排序算法。为提高效率加入标志位flag,当第i次寻找最大值时,如果相邻两个数均未发生互换,此时flag位为false,即说明此时数组已经按照递增排列,可提前终止。此处应该注意flag=false所在位置,因为需要保证第i次寻找最大值过程中,遍历到所有未参与排列的数据,所以flag=false应该放在循环条件for(int j=0; j

voidbubble(std::vector&arr,intlen)
{
boolflag=true;
for(inti=0;i

中值滤波的实现免费云主机域名

需要注意的主要问题:

为了能够遍历到原图的边界,需要对原图进行边界扩充,扩充长度为(窗口的长度-1)/ 2。
注意利用窗口对扩充后的图像遍历时,起始的位置不是0,而是扩充的长度,因为这时对应的才是原图的第一个像素点,同理结束的位置也是原图的最后一个像素点。
另外为了方便将窗口内对应的像素存到容器中,可以写两个循环,循环长度为窗口的长度与宽度,依次将像素值存入容器中。
最后对容器内的像素按照递增排列后,取中值赋给目标矩阵相应的位置,而此时的位置也应该用i-h,对应扩充前的位置。
经实践证明我写的这两个算法可有效使用。

voidmedianFilter(cv::Mat&src,cv::Mat&dst,cv::Sizewidth)
{
//判断窗口是否为奇数
if(width.width%2==0||width.height%2==0)
{
std::coutv;
for(intii=i-h;ii(ii,jj));
}
}
//对容器内存放的像素排序
intlen=width.area();
bubble(v,len);
//将中值赋给目标图像对应位置
dst.at(i-h,j-w)=v[(len-1)/2];

}
}

}

}

关于“C++如何实现中值滤波”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++如何实现中值滤波”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

需要注意的主要问题:为了能够遍历到原图的边界,需要对原图进行边界扩充,扩充长度为(窗口的长度-1)/ 2。
注意利用窗口对扩充后的图像遍历时,起始的位置不是0,而是扩充的长度,因为这时对应的才是原图的第一个像素点,同理结束的位置也是原图的最后一个像素点。
另外为了方便将窗口内对应的像素存到容器中,可以写两个循环,循环长度为窗口的长度与宽度,依次将像素值存入容器中。
最后对容器内的像素按照递增排列后,取中值赋给目标矩阵相应的位置,而此时的位置也应该用i-h,对应扩充前的位置。
经实践证明我写的这两个算法可有效使用。关于“C++如何实现中值滤波”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++如何实现中值滤波”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: 如何为高负载网络优化Nginx和Node.js

这篇文章主要介绍了如何为高负载网络优化Nginx和Node.js的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何为高负载网络优化Nginx和Node.js文章都会有所收获,下面我们一起来看看吧。网络调优如果不先对nginx和no…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/03 10:47
下一篇 05/03 10:47

相关推荐