2019-04-28 20:35:03 Eastmount 阅读数 10064
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4124 人正在学习 去看看 贾志刚

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

同时推荐作者的C++图像系列知识:
[数字图像处理] 一.MFC详解显示BMP格式图片
[数字图像处理] 二.MFC单文档分割窗口显示图片
[数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
[数字图像处理] 四.MFC对话框绘制灰度直方图
[数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
[数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
[数字图像处理] 七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

前文参考:
[Python图像处理] 一.图像处理基础知识及OpenCV入门函数
[Python图像处理] 二.OpenCV+Numpy库读取与修改像素
[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
[Python图像处理] 五.图像融合、加法运算及图像类型转换
[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移
[Python图像处理] 七.图像阈值化处理及算法对比
[Python图像处理] 八.图像腐蚀与图像膨胀
[Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算
[Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图
[Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算
[Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
[Python图像处理] 十五.图像的灰度线性变换
[Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换
[Python图像处理] 十七.图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子和Laplacian算子
[Python图像处理] 十八.图像锐化与边缘检测之Scharr算子、Canny算子和LOG算子
[Python图像处理] 十九.图像分割之基于K-Means聚类的区域分割
[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
[Python图像处理] 二十一.图像金字塔之图像向下取样和向上取样
[Python图像处理] 二十二.Python图像傅里叶变换原理及实现

前面一篇文章我讲解了傅里叶变换,它将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理。本文将继续补充基于傅里叶变换的高通滤波和低通滤波。基础性文章,希望对你有所帮助。同时,该部分知识均为杨秀璋查阅资料撰写,转载请署名CSDN+杨秀璋及原地址出处,谢谢!!

1.高通滤波
2.低通滤波
3.本章小结


PS:文章参考自己以前系列图像处理文章及OpenCV库函数,同时参考如下文献:
《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年.
《数字图像处理学》(第3版),阮秋琦,电子工业出版社,2008年,北京.
《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015,北京.
百度百科-傅里叶变换
网易云课堂-高登教育 Python+OpenCV图像处理


一.高通滤波

傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,通过修改频率以达到图像增强、图像去噪、边缘检测、特征提取、压缩加密等目的。

过滤的方法一般有三种:低通(Low-pass)、高通(High-pass)、带通(Band-pass)。所谓低通就是保留图像中的低频成分,过滤高频成分,可以把过滤器想象成一张渔网,想要低通过滤器,就是将高频区域的信号全部拉黑,而低频区域全部保留。例如,在一幅大草原的图像中,低频对应着广袤且颜色趋于一致的草原,表示图像变换缓慢的灰度分量;高频对应着草原图像中的老虎等边缘信息,表示图像变换较快的灰度分量,由于灰度尖锐过度造成

高通滤波器是指通过高频的滤波器,衰减低频而通过高频,常用于增强尖锐的细节,但会导致图像的对比度会降低。该滤波器将检测图像的某个区域,根据像素与周围像素的差值来提升像素的亮度。图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。

接着通过高通滤波器覆盖掉中心低频部分,将255两点变换为0,同时保留高频部分,其处理过程如下图所示。

rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

通过高通滤波器将提取图像的边缘轮廓,生成如下图所示图像。

# -*- coding: utf-8 -*-
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

#读取图像
img = cv.imread('Lena.png', 0)

#傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

#设置高通滤波器
rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)

#显示原始图像和高通滤波处理图像
plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(122), plt.imshow(iimg, 'gray'), plt.title('Result Image')
plt.axis('off')
plt.show()

输出结果如下图所示,第一幅图为原始“Lena”图,第二幅图为高通滤波器提取的边缘轮廓图像。它通过傅里叶变换转换为频谱图像,再将中心的低频部分设置为0,再通过傅里叶逆变换转换为最终输出图像“Result Image”。


二.低通滤波

低通滤波器是指通过低频的滤波器,衰减高频而通过低频,常用于模糊图像。低通滤波器与高通滤波器相反,当一个像素与周围像素的插值小于一个特定值时,平滑该像素的亮度,常用于去燥和模糊化处理。如PS软件中的高斯模糊,就是常见的模糊滤波器之一,属于削弱高频信号的低通滤波器。

下图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。如果构造低通滤波器,则将频谱图像中心低频部分保留,其他部分替换为黑色0,其处理过程如图所示,最终得到的效果图为模糊图像。

那么,如何构造该滤波图像呢?如下图所示,滤波图像是通过低通滤波器和频谱图像形成。其中低通滤波器中心区域为白色255,其他区域为黑色0。

低通滤波器主要通过矩阵设置构造,其核心代码如下:

rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

通过低通滤波器将模糊图像的完整代码如下所示:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt

#读取图像
img = cv2.imread('lena.bmp', 0)

#傅里叶变换
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
fshift = np.fft.fftshift(dft)

#设置低通滤波器
rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2) #中心位置
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

#掩膜图像和频谱图像乘积
f = fshift * mask
print f.shape, fshift.shape, mask.shape


#傅里叶逆变换
ishift = np.fft.ifftshift(f)
iimg = cv2.idft(ishift)
res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])

#显示原始图像和低通滤波处理图像
plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(122), plt.imshow(res, 'gray'), plt.title('Result Image')
plt.axis('off')
plt.show()

输出结果如图所示,第一幅图为原始“Lena”图,第二幅图为低通滤波器模糊处理后的图像。


三.总结

讲到这里,傅里叶变换的图像增强、图像去噪、边缘检测、特征提取已介绍,前面的文章详细讲解了图像平滑和图像锐化各种算子,希望读者能进行相关对比。下一篇文章,作者将分享几个Python图像处理的特效处理,包括素描、黄昏、灯光、浮雕等效果,希望读者喜欢。

时也,命也。
英语低分数线一分,些许遗憾,但不气馁,更加努力。雄关漫道真如铁,而今迈过从头越,从头越。苍山如海,残阳如血。感谢一路陪伴的人和自己。

无论成败,那段拼搏的日子都很美。结果只会让我更加努力,学好英语。下半年沉下心来好好做科研写文章,西藏之行,课程分享。同时,明天的博士考试加油,虽然裸泳,但也加油!还有春季招考开始准备。

最后补充马刺小石匠精神,当一切都看起来无济于事的时候,我去看一个石匠敲石头.他一连敲了100次,石头仍然纹丝不动。但他敲第101次的时候,石头裂为两半。可我知道,让石头裂开的不是那最后一击,而是前面的一百次敲击的结果。人生路漫漫,不可能一路一帆风顺,暂时的不顺只是磨练自己的必经之路,夜最深的时候也是距黎明最近的时刻,经历过漫漫长夜的打磨,你自身会更加强大。

最后希望这篇基础性文章对您有所帮助,如果有错误或不足之处,请海涵!

(By:Eastmount 2019-04-28 深夜96点写于花溪 https://blog.csdn.net/Eastmount )

2015-10-27 22:56:58 u013752202 阅读数 2778
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4124 人正在学习 去看看 贾志刚

在提取目标的局部空间和频率域信息上,Gabor小波变换具有良好的特性,对图像进行Gabor小波变换,就类似于人类视网膜中的简单细胞对图像刺激作出的响应。

Gabor小波变换不仅仅可以提取出图像纹理的特征,并且可以减小光照和位置对图像识别造成的干扰。一般对图像进行Gabor小波变换提取特征后,还要进行降维处理,以提高运算效率。

一、二维Gabor小波核函数定义


式中,对于Gabor核函数,u为方向,v为尺度,z=(x,y)即图像坐标,||*||表示对*进行取模运算。

用来补偿由频率决定的能量谱的衰弱,并且通过对包络函数进行加窗来限定振荡函数的变化范围,使其仅在局部起作用。通过包络函数的局部性可知,滤波器的真正功能是在指定坐标点提取相应的特征,因此可以将其视为一种Gabor小波。

是振荡函数,它的虚部为一个正弦函数,实部为一个余弦函数。是直流分量,其中的sigma是高斯函数半径,它可以限制Gabor小波的尺寸,当sigma的值很大的时候可以忽略直流分量的影响,使得滤波器对全局照明的敏感性降低,它的优点是不仅可以保持空间关系的信息,还能同时描述空间频率结构,是滤波器的中心频率,

,其中为最大频率,

在频域的核函数中,f是空间因子,体现滤波器的方向,可以描述Gabor滤波器在不同方向不同尺度的响应,经过改变的值,可以获得一组Gabor滤波函数,一般尺度取值(v={0,1,2,3,4}),方向取值(u={0,1,2,3,4,5,6,7}),这样一共可以获得40个不同的Gabor小波函数。下面的程序取:=PI/2,sigma=2*PI,f=sprt(2),v={0,1,2,3,4},u={0,1,2,3,4,5,6,7};从而获取40个小波函数。

二、代码实现

该部分Gabor滤波器的类用的是网上普遍用的mian zhou所编写的cvGabor类,调试环境为Qt,实现功能包括创建5个尺度8个方向共40个Gabor小波滤波器函数并显示;对图像进行Gabor滤波并显示和保存变化后的数据。下载页:http://download.csdn.net/detail/u013752202/9218517

下面是创建50个Gabor滤波器并显示的代码:

#include "cvgabor.h"
#include "opencv2\opencv.hpp"
using namespace cv;
int main(int argc,char **argv){
    //创建8个方向,5个尺度的Gabor滤波器
    IplImage *kernel[40];
    int n=0;
    for(int j=0;j<5;j++){
        for(int i=0;i<8;i++){
            double Sigma = 2*PI;
            double F = sqrt(2.0);
            CvGabor *gabor1 = new CvGabor;
            gabor1->Init(i*PI/8, j, Sigma, F);
            kernel[n]=cvCreateImage(cvSize(gabor1->get_mask_width(),gabor1->get_mask_width()), IPL_DEPTH_8U, 1);
            kernel[n]= gabor1->get_image(CV_GABOR_REAL);
            n++;
        }
    }
    //显示所有40个Gabor滤波器的实部
    IplImage *kernelAll=cvCreateImage(cvSize(8*kernel[0]->width,5*kernel[0]->height), IPL_DEPTH_8U, 1);
    for(int i=0;i<40;i++){
        int x=i*kernel[0]->width%(kernelAll->width);
        int line=i*kernel[0]->width/(kernelAll->width);
        int y=line*kernel[0]->height;
        int w=kernel[0]->width;
        int h=kernel[0]->height;
        cvSetImageROI(kernelAll,cvRect(x,y,w,h));
        cvResize(kernel[i],kernelAll);
        cvResetImageROI(kernelAll);
    }
    cvNamedWindow("Gabor Kernel", 1);
    cvShowImage("Gabor Kernel",kernelAll);
    waitKey(0);
    return 0;
}

下图为运行后得到的40个Gabor滤波器。





2019-05-01 15:51:58 qq_30815237 阅读数 4371
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4124 人正在学习 去看看 贾志刚

      小波指的是一种能量在时域非常集中的波,它的能量有限,都集中在某一点附近,而且积分的值为零,这说明它与傅里叶波一样是正交波。

    图像的傅里叶变换是将图像信号分解为各种不同频率的正弦波。同样,小波变换是将图像信号分解为由原始小波位移和缩放之后的一组小波。小波在图像处理里被称为图像显微镜,原因在于它的多分辨率分解能力可以将图片信息一层一层分解剥离开来。剥离的手段就是通过低通和高通滤波器

     小波变换可以和傅里叶变换结合起来理解。傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数。小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数。不同的小波通过平移与尺度变换分解,平移是为了得到原函数的时间特性,尺度变换是为了得到原函数的频率特性。

小波变换步骤:

1.把小波w(t)和原函数f(t)的开始部分进行比较,计算系数C。系数C表示该部分函数与小波的相似程度。

2.把小波向右移k单位,得到小波w(t-k),重复1。重复该步骤直至函数f结束.

3.扩展小波w(t),得到小波w(t/2),重复步骤1,2.

4.不断扩展小波,重复1,2,3.

haar小波:

我这里使用的haar小波,缩放函数是[1 1],小波函数是[1 -1]。是最简单的小波了。

图像二维离散小波变换 :

     图像的二维离散小波分解和重构过程如下图所示,分解过程可描述为:首先对图像的每一行进行 1D-DWT,获得原始图像在水平方向上的低频分量 L 和高频分量 H,然后对变换所得数据的每一列进行 1D-DWT,获得原始图像在水平和垂直方向上的低频分量 LL、水平方向上的低频和垂直方向上的高频 LH、水平方向上的高频和垂直方向上的低频 HL 以及水平和垂直方向上的的高频分量 HH。

    重构过程可描述为:首先对变换结果的每一列进行以为离散小波逆变换,再对变换所得数据的每一行进行一维离散小波逆变换,即可获得重构图像。由上述过程可以看出,图像的小波分解是一个将信号按照低频和有向高频进行分离的过程,分解过程中还可以根据需要对得到的 LL 分量进行进一步的小波分解,直至达到要求。

对于二维图像Haar变换不再从一个方向进行滤波,而是从水平和竖直两个方向进行低通和高通滤波(水平和竖直先后不影响),用图像表述如图所示:图中a表示原图,图b表示经过一级小波变换的结果,h1 表示水平反向的细节,v1 表示竖直方向的细节,c1表示对角线方向的细节,b表示下2采样的图像。图c中表示继续进行Haar小波变换。一级Haar小波变换实际效果如图3所示

                       

matlab实例

小波去噪实现步骤:

(1)二维信号的小波分解。选择一个小波和小波分解的层次N,然后计算信号s到第N层的分解。
(2)对高频系数进行阈值量化。对于从1~N的每一层,选择一个阈值,并对这一层的高频系数进行软阈值量化处理。
(3)二维小波重构。根据小波分解的第N层的低频系数和经过修改的从第一层到第N的各层高频系数,计算二维信号的小波重构

Matlab函数介绍

1、dwt2是二维单尺度小波变换,其可以通过指定小波或者分解滤波器进行二维单尺度小波分解。DWT2的一种语法格式:[cA,cH,cV,cD]=dwt2(X,'wname');也就是说DWT2只能对某个输入矩阵X进行一次分解。

[cA1, cH1, cV1, cD1] = dwt2(I_noise, 'haar');
figure
subplot(221), imshow(cA1, []);
subplot(222), imshow(cH1, []);
subplot(223), imshow(cV1, []);
subplot(224), imshow(cD1, []);

 

可以看出,第一张图是图像的近似,相当于图像的低频部分,而其它三张图是图像的轮廓,也就是水平,垂直和对角三个方向的细节。是图像的高频部分。至此,各变量的维数如下所示。

                                       

2、wavedec2函数

     该函数用于对多尺度二维小波进行分解,其常用调用格式:[C,S] = wavedec2(X,N,'wname'):

  • X:要进行小波分解的图像; 
  • N :指定分解的层数; 
  • wname:指定用什么小波基进行分解。 
  • 输出: 
  • c:为各层分解系数; 
  • s: 各层分解系数长度,也就是大小。

用小波函数wname对信号X在尺度N上的二维分解,其中N为大于1的正整数。可以对输入矩阵X进行N次分解。C代表分解系数的组合,是一个向量:   
                                   
     C的大小为 [1,img_height×img_width];A(N)是图像第N层的近似表示,尺度最小,在金字塔中就是每层的下采样的图像,而H、V、D分别表示图像的水平高频分量,垂直高频分量,对角高频分量。正如我们在金字塔概念中所了解的,在第N-1层下采样到N层,N层的图像维度(尺度)是变小了,也就意味着在下采样过程中丢失了信息,而这些丢失的信息实质是高频信息,那么这些信息在小波分解中可以通过HVD这些高频分量来保存。 
    这里贴上小波分解之后的结果图,直观地感受一下。这里对原始图像进行三层小波分解。红框a表示的就是近似图像。
 

    需要指出的是,每一次的小波分解都是在近似图像上进行分解。S 是储存各层分解系数长度的,即第一行是A(N)的长度,第二行是H(N)|V(N)|D(N)|的长度,第三行是 H(N-1)|V(N-1)|D(N-1)的长度,倒数第二行是H(1)|V(1)|D(1)长度,最后一行是原始图像img的长度(大小)。 这里原始图像是512×512,并进行了3层的小波分解。对应的s内容如下图: 
  
                                       

S表示每一层分解结果的维数,如果进行n层小波分解,S 的大小是(n+1)*2,最后一行表示的是原始图像的size。

                              

3、wdcbm2函数

     [thr,nkeep] = wdcbm2(c,s,alpha,m) 返回与level相关的阈值thr和要保持的系数数NKEEP, 函数用于去噪或压缩。使用基于Birge-Massart策略的小波系数选择规则获得thr。通常,alpha= 1.5用于压缩,alpha= 3用于去噪。使用wdcbm2选择各层的独立阈值。

     [C,S]是要由wavedec2函数得到的进行去噪或压缩的图像的小波分解结构,level j = size(S,1)-2.

    THR是3*j的矩阵,THR(:,j)包含对于level j情况下,水平,对角线和垂直三个方向的阈值。 NKEEP是长度为j的向量,NKEEP(j)包含要保持在级别j情况下系数的数量。

j,M和ALPHA定义策略:

  1. 在j + 1级(和更粗略的级别),一切都保留。
  2. 对于从1到j的级别i,n_i最大系数保持为n_i = M /(j + 2-i)^ ALPHA。
  3. M的默认值是M = prod(S(1,:))最粗近似系数的数量。

4、wdencmp函数

    [XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,S,'wname',N,THR,SORH) 
      函数wdencmp用于一维或二维信号的消噪或压缩。wname是所用的小波函数,gbl(global的缩写)表示每层都采用同一个阈值进行处理,lvd表示每层用不同的阈值进行处理,N表示小波分解的层数,THR为阈值3*N,SORH表示选择软阈值还是硬阈值(分别取为’s’和’h’),XC是消噪或压缩后的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复和压缩L^2的范数百分比, 是用百分制表明降噪或压缩所保留的能量成分。

5、wrcoef2函数

   wrcoef2函数是用来重建一幅图像的系数,其实就是根据小波分解之后的系数c来重建其对应的图像。重建好的图像的尺度与原始图像一致。即无论你要重构哪个层的系数,最终它的维度都是和原始图像的尺度一致。其调用形式如下: 
        X = wrcoef2(‘type’,c,s,’wname’,N) 

  • type :指定要进行重构的小波系数,如a –近似图像 ;h – 水平高频分量;v – 垂直高频分量;d–对角高 
  • 频分量; 
  • c: 是小波分解函数wavedec2分解的小波系数; 
  • s: 是wavedec2分解形成的尺度; 
  • wname :指定小波基; 
  • N :指定重构的小波系数所在的层。 默认重构最大层的系数,N = size(S,1)-2。N所指的层数是如何表示的?比如将图像小波分解成3层,那么N = 3是代表256×256那一层,还是64×64那一层?N=3 代表的是64×64那一层

wrcoef2 的过程就相当于 appcoef2 或者 detcoef2 (抽取系数)后再进行 upcoef2(重构)。

clear;
close all;

file = 'lena_gray_512.tif';
img  = imread(file);
img = double(img);
% 对图像进行3层的小波分解
N = 3; % 设置分解层数
[c,s] = wavedec2(img,N,'db1');

% 对各层的近似图像a进行重构
a1 = wrcoef2('a',c,s,'db1',1);
a2 = wrcoef2('a',c,s,'db1',2);
a3 = wrcoef2('a',c,s,'db1',3);

6、appcoef2 函数

appcoef2适用于2维图像,其主要是为了提取小波分解中形成的近似图像,即低频分量。 
 A = appcoef2(c,s,’wname’,N)  

  • c:小波分解的小波系数 
  • s:小波分解的对应尺度 
  • wname :指定小波基 
  • N :指定小波系数所在的层数 

7、detcoef2

函数detcoef2 用来对二维离散小波变换的高频部分系数进行提取。 其调用形式为: 
D = detcoef2(O,c,s,N)  

  • O:指定提取哪个高频分量,取值分别为:’h’ –水平高频 or ‘v’ – 垂直高频 or ‘d’ – 对角高频; 
  • c:小波系数矩阵; 
  • s:尺度矩阵;

8、wthcoef2函数

该函数用于对二维信号的小波系数阈值进行处理,常用调用格式:
    NC = wthcoef2('type',C,S,N,T,SORH):返回经过小波分解结构[C,S]进行处理后的新的小波分解向量NC,[NC,S]即构成一个新的小波分解结构。N是一个包含高频尺度的向量,T是相应的阈值,且N和T长度须相等。返回'type'(水平、垂直、对角线)方向的小波分解向量NC。参数SORH用来对阈值方式进行选择,当SORH = 's'时,为软阈值,当SORH = 'h'时,为硬阈值。

9、重构函数 waverec2

    waverec2函数是wavedec2的反函数,返回的结果X就是原始图像。其基于小波分解结构[c,s]对矩阵X进行多级小波重构,其中[c,s]是wavedec2函数的返回值。其调用格式如下: 
      X = waverec2(c,s,’wname’) )  

  • c: 系数矩阵 
  • s: 尺度矩阵 
  • wname : 指定小波基 

值得注意的是,X = waverec2(c,s,’wname’) 相当于 X = appcoef2(c,s,’wname’,0)。

如何进行小波分解:

假设{x1,x2}是一个由两个元素组成的信号,定义这两个元素的平准和细节为:

a = (x1+x2)/2 ;d=(x1-x2)/2

变换实例如下:

    

from:https://blog.csdn.net/qq_39936376/article/details/80809770

from:http://blog.sina.com.cn/s/blog_84024a4a0101fn02.html

from:https://blog.csdn.net/Chaolei3/article/details/80940459

2013-01-13 22:25:50 lanction 阅读数 837
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4124 人正在学习 去看看 贾志刚

    首先申明,本文主要是总结了冈萨雷斯先生的数字图像处理第二版(P94)的内容,再结合网上搜集的其他资料以及自己的理解,差不多算是个读书的小总结。这种形式的小总结今后将会经常出现。

    图像处理的方法有两类:空间域方法与频域方法,“空间域”一词是指图像平面自身,这类方法是以对图像的像素的直接处理为基础;“频域”是以修改图像的傅里叶变换为基础的。本文所说的就是针对空间域的。

    而平滑滤波,顾名思义信号上就是将一个波的毛刺或某一频率以上的部分去掉,简单说就是低通滤波。反应到图像上就是降噪和图像模糊处理(由于高频反应了细节,故而去除细节得到模糊的轮廓),由于图像的边缘一般处于高频部分,所以这种平滑滤波就会造成边缘模糊,即图像与背景不会泾渭分明而是模糊过渡。

    一、均值滤波器

    此滤波器也称为平滑线性滤波器,定义为平滑线性空间滤波器的输出为包含在滤波掩膜邻域内像素的简单平均值,即某个像素点的值用邻域这若干个点的平均灰度值来代替,通过求平均的方法使得改点的高频部分变小。下图显示了两个3*3的平滑滤波器:

    其中图a为最简单常规的,它前面的1/9是归一化的需要,这种所有系数都相等的空间平滑均值滤波有时也称作盒滤波器。

    但实际中图b的变系数是更常用的,这个掩膜又称作加权平均,权值大的(b中的中间值最大)影响力就越大,也就更重要。图b是高斯滤波3*3的实例。之所以高斯滤波更常用或更重要,主要有两点:1是由于高斯函数具有旋转对称性,保证了滤波时各个方向的平滑程度相同;2是离中心点越远权值越小保证了边缘细节不被模糊。还有其他若干优点百度一下你就知道。高斯滤波的特性以及如何确定,现在理解还肤浅以后有了感想再说。

    上面说了模糊处理,空间均值处理的重要应用就是为了提取出感兴趣的物体首先将图像模糊化,将那些较小的物体与背景融合,较大物体(或大强度物体)虽然会变得模糊却易于提取,而掩膜的大小是由那些即将融入背景中的物件尺寸来决定。模糊过的图像再通过设定阈值就能提取出感兴趣的大物体了(这是个保留主干省去枝叶的做法)。

    二、统计排序滤波器

    这是非线性空间滤波器。最常用的是中值滤波,中值滤波是将邻域中的象素按灰度级排序,取其中间值为输出象素。中值滤波的效果依赖于两个要素:邻域的空间范围和中值计算中涉及的象素数(当空间范围较大时,一般只取若干稀疏分布的象素作中值计算)。中值滤波能够在抑制随机噪声的同时不使边缘模糊,因而受到欢迎。但对于线、点等细节多的图像不宜采用中值滤波,而加性加盐噪声中值滤波更为合适。

    统计排序滤波器关键是首先对邻域内按灰度值排序,如由低到高排,排完之后根据需要,若输出像素为中间值则为中值滤波;输出像素为最大值则为最大值滤波;输出像素为最小值则为最小值滤波。这些滤波机理以后会讲到。 

2018-07-27 11:36:00 u011092156 阅读数 534
  • OpenCV3.2 Java图像处理视频学习教程

    OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java OpenCV图像处理部分内容,包括Mat对象使用、图像读写、 基于常用核心API讲述基本原理、使用方法、参数、代码演示、图像处理思路与流程讲授。主要内容包括opencv像素操作、滤波、边缘提取、直线与圆检测、形态学操作与分水岭、图像金子塔融合重建、多尺度模板匹配、opencv人脸检测、OpenCV跟Tomcat使用实现服务器端图像处理服务。

    4124 人正在学习 去看看 贾志刚

滤波是信号处理及图像领域的一个基本操作,旨在特定的应用程序中,选择性地提取图像中被认为传达重要信息的部分。对于图像而言,一般使用二维滤波器对图像进行信号分析。
对于时序信号而言,一般有两个变换域,时域和频域,时域对应信号幅值分布,频域对应幅值强度的变化情况。常用的变化方法有傅里叶变换和小波变换。
类比图像二维信号,分为空域和频域空域对应图像灰度值分布,频域则对应图像的灰度变化情况,某些区域灰度强度变化迅速,则频率高,变化缓慢,则频率底。往往频率高的部分蕴含着丰富的图像特征,比如角点,边缘等,一般通过二维滤波器来进行卷积操作。

下面复习常用的二维滤波器。

1. 低通滤波器
低通(Low-pass)滤波器,即保留图像的低频部分,舍去高频部分,降低图像的变化幅度。
线性滤波器的定义:当滤波器的作用相当于将一个像素替换为相邻像素的加权总和时,称之为线性滤波器。
(1)均值滤波器
滤波器中的每个元素加权值一样,即中心元素的值为卷积核内元素的平均值
效果:对图像进行了模糊和平滑
(2) 高斯滤波器
滤波器中的每个元素加权值与它离开中心像素的距离成反比,即靠近中心的元素影响大,远处元素影响小。
效果:相比于均值滤波器对图像的模糊程度较小。
高斯滤波器参数σ反应加权系数的标准差,σ越大,高斯滤波器的频带就越宽,对图像的平滑程度就越大。

2. 中值滤波器
由于中值滤波器的作用结果是选择滤波器中元素的中值作为最终输出。因此为非线性滤波器
效果:去除图像中的椒盐噪点。

3. 方向滤波器
方向滤波器属于高通滤波器,是为了求解图像中灰度变化强烈的区域。
(1)一阶导数滤波器
一阶导数,即梯度,反应的是灰度的变化情况,在滤波器方向上变化剧烈的区域对应高值,平坦区域对应低值。一阶导数的极值点,对应了原图像的灰度突变区域,即图像的边缘。
常见的一阶算子有:Sobel算子、Prewitt算子、Roberts算子、Scharr算子。
效果:可以用来检测图像的边缘。

(2)二阶滤波器
二阶导数,反应的是梯度的变化情况,一阶导数的极值点,对应了二阶导数的零点。
常见的二阶滤波器为Laplacian算子。
效果:可以通过检测拉普拉斯算子的零交叉点来检测图像的边缘。
让一幅图减去它的拉普拉斯变化可以增强图像的对比度。

频域滤波

阅读数 118

没有更多推荐了,返回首页