OpenCV——非线性滤波器

参考:

PS 图像特效,非线性滤波器

// define head function
#ifndef PS_ALGORITHM_H_INCLUDED
#define PS_ALGORITHM_H_INCLUDED

#include <iostream>
#include <string>
#include "cv.h"
#include "highgui.h"
#include "cxmat.hpp"
#include "cxcore.hpp"

using namespace std;
using namespace cv;

void Show_Image(Mat&, const string &);

#endif // PS_ALGORITHM_H_INCLUDED

/*
This program will generate
 "Paint" effect.

*/

#include "PS_Algorithm.h"
#include <time.h>

using namespace std;
using namespace cv;

int main(void)
{
    string Img_name("4.jpg");
    Mat Image_in;
    Image_in=imread(Img_name);
    // Show_Image(Image_in, Img_name);

    Mat Image_out(Image_in.size(), CV_32FC3);
    Image_in.convertTo(Image_out, CV_32FC3);

    Mat r(Image_in.size(), CV_32FC1);
    Mat g(Image_in.size(), CV_32FC1);
    Mat b(Image_in.size(), CV_32FC1);

    Mat rgb[]={b,g,r};

    split(Image_out, rgb);

    int P_size=3;
    Mat sub_mat;

    double min_val;

    for (int i=P_size; i<Image_in.rows-P_size-1; i++)
    {
        for (int j=P_size; j<Image_in.cols-1-P_size; j++)
        {
            for(int k=0; k<3; k++)
            {
                sub_mat=rgb[k].operator()(Range(i-P_size,i+P_size), Range(j-P_size,j+P_size));
                cv::minMaxLoc(sub_mat, &min_val);
                Image_out.at<Vec3f>(i,j)[k]=min_val;
            }
            /*
            sub_mat=b.operator()(Range(i-P_size,i+P_size), Range(j-P_size,j+P_size));
            cv::minMaxLoc(sub_mat, min_val);
            Image_out.at<Vec3f>(i,j)[0]=*min_val;

            sub_mat=g.operator()(Range(i-P_size,i+P_size), Range(j-P_size,j+P_size));
            cv::minMaxLoc(sub_mat, min_val);
            Image_out.at<Vec3f>(i,j)[1]=*min_val;

            sub_mat=r.operator()(Range(i-P_size,i+P_size), Range(j-P_size,j+P_size));
            cv::minMaxLoc(sub_mat, min_val);
            Image_out.at<Vec3f>(i,j)[2]=*min_val;
            */

        }
    }

    Image_out=Image_out/255.0;

    Show_Image(Image_out, "out");

    imwrite("out.jpg", Image_out*255);

    waitKey();
    cout<<"All is well."<<endl;

}

// define the show image
#include "PS_Algorithm.h"
#include <iostream>
#include <string>

using namespace std;
using namespace cv;

void Show_Image(Mat& Image, const string& str)
{
    namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
    imshow(str.c_str(), Image);

}

原图

效果图

时间: 2024-11-03 16:14:26

OpenCV——非线性滤波器的相关文章

PS 图像特效-非线性滤波器

利用非线性滤波器,使图像的色彩凝块,形成一种近似融化的特效. clc; clear all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=imread('4.jpg'); Image=double(Image); size_info=size(Image); height=size_info(1); width=size_info(2); N=3; Image_out=Image; for i=1+

[数字图像处理]图像去噪初步(2)--非线性滤波器

1.非线性处理与线性处理的区别 上一篇博文的内容,是关于均值滤波器的.比如说像算术均值滤波器,几何均值滤波器.这以类型的滤波器的常常被用于剔除某些不需要的频率成分,或者选择需要的频率成分,从而达到去噪的目的.这样的滤波器,被称为线性滤波器. 然而,还有一些特殊滤波器,他们被称为非线性滤波器.其代表为中央值滤波器.所谓中央值滤波器,就是将一定范围内的数据(对于图像而言,是像素的灰度值)进行排序,选择中央值作为滤波器的输出. 中央值滤波器的目的并不是频率成分的选择,而是求root信号.关于root信

opencv 卡尔曼滤波器例子,自己修改过

一.卡尔曼滤波器的理论解释 http://blog.csdn.net/lindazhou2005/article/details/1534234(推荐) 二.代码中一些随机数设置函数,在opencv中文网站上没有查到: cvRandInit() 初始化CvRandState数据结构,可以选定随机分布的种类,并给定它种子,有两种情形 cvRandInit(CvRandState数据结构,随机上界,随机下界,均匀分布参数,64bits种子的数字) cvRandInit(CvRandState数据结构

OpenCV粒子滤波器用于物体跟踪

1.引言 这个项目是由俄亥俄州立大学(OSU)一位博士生所写,http://web.engr.oregonstate.edu/~hess/,这位博士在其个人主页上对该项目进行了如下描述: Object tracking is a tricky problem. A general, all-purpose object tracking algorithm must deal with difficulties like camera motion, erratic object motion,

每日一练之自适应中值滤波器(基于OpenCV实现)

本文主要介绍了自适应的中值滤波器,并基于OpenCV实现了该滤波器,并且将自适应的中值滤波器和常规的中值滤波器对不同概率的椒盐噪声的过滤效果进行了对比.最后,对中值滤波器的优缺点了进行了总结. 空间滤波器 一个空间滤波器包括两个部分: 一个邻域,滤波器进行操作的像素集合,通常是一个矩形区域 对邻域中像素进行的操作 一个滤波器就是在选定的邻域像素上执行预先定义好的操作产生新的像素,并用新的像素替换掉原来像素形成新的图像. 通常,也可以将滤波器称之为核(kernel),模板(template)或者窗

OpenCV基础(六)---图像滤波

图像滤波 对图像进行单个像素操作,主要是进行对比度和阈值处理 而图像滤波在像素邻域间进行,一来达到我们希望的效果,二来进一步进行图像特征提取 滤波分为空间域和频域滤波,空间域滤波又分线性.非线性滤波 常用的线性滤波有,均值滤波,高斯滤波:非线性滤波有中值滤波,双边滤波 线性滤波 均值模糊:blur() void blur( InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderTyp

图像处理之基础---滤波器 高斯滤波

引用 keendawn 的 高斯(核)函数简介 1函数的基本概念 所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数. 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小.最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 ,

深度理解高斯滤波器

1.高斯滤波器综述 高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器.高斯平滑滤波器对于抑制服从正态分布的噪声非常有效.一维零均值高斯函数为: g(x)=exp( -x^2/(2 sigma^2) 其中,高斯分布参数Sigma决定了高斯函数的宽度.对于图像处理来说,常用二维零均值离散高斯函数作平滑滤波器. 高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的

opencv笔记(3)线性滤波、非线性滤波、图像深度、通道

15     遍历图像中的像素,是先for行数后for列数的,也就是一列一列的遍历,matlab中是从1开始计数,opnecv中采用c语言的从0开始计数. 矩阵归一化:normalize()函数,参数挺多,不过大多都有默认值,不用都写出来,一般要求的图像归一化精简写法为 normalize(InputArray secImage , outputArray dstImage);一个输入,一个输出即可. 16     消除图像中的噪声成分叫做图像的平滑化或滤波操作,信号或图像的能量大部分集中在幅度