空间域锐化—梯度锐化法

空间域锐化—梯度锐化法
空间域锐化—梯度锐化法

二○一三~二○一四学年第一学期

电子信息工程系

实验报告

班级:电子信息工程2010级1002班姓名:方之昊

学号:201012135050

课程名称:图像处理实验

指导教师:朱磊

空间域锐化—梯度锐化法

一、实验目的

(1)掌握基本的空间域锐化方法,观察图像增强的效果,加深理解;

(2)了解不同类型梯度算子的特性;

二、实验内容

(1)空间域锐化

三、实验要求

(1)用matlab语言进行仿真实验;

(2)递交实验报告,要求给出实验原理、源程序实验结果及分析。四、实验图像

五、具体实验内容及要求

1.频域平滑实验内容

(1)读入原图像bridge.gif并显示;

(2)采用sobel算子对图像进行处理,并显示结果;

(3)尝试采用其他锐化模板进行处理

1.采用Roberts算子

I=imread('C:\图像\bridge.gif');

subplot(2,2,1),imshow(I)

title('原始图像')

hx=[-1;1];%生成Sobel垂直梯度模板

hy=hx';%生成Roberts水平梯度模板gradx=filter2(hx,I,'same');

gradx=abs(gradx);%计算图像的Roberts垂直梯度subplot(2,2,2),imshow(gradx,[])

title('图像的Roberts垂直梯度')

grady=filter2(hy,I,'same');

grady=abs(grady);%计算图像的Roberts水平梯度subplot(2,2,3),imshow(grady,[]);

title('图像的Roberts水平梯度');

grad=gradx+grady;%得到图像的Roberts梯度

subplot(2,2,4),imshow(grad,[]);

title('图像的Roberts梯度');

原始图像图像的Roberts垂直梯度

图像的Roberts水平梯度图像的Roberts梯度

2.采用Sobel算子

I=imread('C:\图像\bridge.gif');

subplot(2,2,1),imshow(I)

title('原始图像')

hx=[-1-2-1;000;121];%生成Sobel垂直梯度模板

hy=hx';%生成Sobel水平梯度模板gradx=filter2(hx,I,'same');

gradx=abs(gradx);%计算图像的Sobel垂直梯度

subplot(2,2,2),imshow(gradx,[])

title('图像的Sobel垂直梯度')

grady=filter2(hy,I,'same');

grady=abs(grady);%计算图像的Sobel水平梯度

subplot(2,2,3),imshow(grady,[]);

title('图像的Sobel水平梯度');

grad=gradx+grady;%得到图像的Sobel梯度

subplot(2,2,4),imshow(grad,[]);

title('图像的Sobel梯度');

图像的Sobel水平梯度图像的Sobel梯度

3.采用Prewitt算子

I=imread('C:\图像\bridge.gif');

subplot(2,2,1),imshow(I)

title('原始图像')

hx=[-1-1-1;000;111];%生成Prewitt垂直梯度模板

hy=hx';%生成Prewitt水平梯度模板gradx=filter2(hx,I,'same');

gradx=abs(gradx);%计算图像的Prewitt垂直梯度subplot(2,2,2),imshow(gradx,[])

title('图像的Prewitt垂直梯度')

grady=filter2(hy,I,'same');

grady=abs(grady);%计算图像的Prewitt水平梯度subplot(2,2,3),imshow(grady,[]);

title('图像的Prewitt水平梯度');

grad=gradx+grady;%得到图像的Prewitt梯度

subplot(2,2,4),imshow(grad,[]);

title('图像的Prewitt梯度');

图像的Prewitt水平梯度图像的Prewitt梯度

4.采用Laplacia算子

I=imread('C:\图像\bridge.gif');

subplot(2,2,1),imshow(I)

title('原始图像')

hx=[011;1-41;010];%生成Laplacia垂直梯度模板

hy=hx';%生成Laplacia水平梯度模板gradx=filter2(hx,I,'same');

gradx=abs(gradx);%计算图像的Laplacia垂直梯度subplot(2,2,2),imshow(gradx,[])

title('图像的Laplacian垂直梯度')

grady=filter2(hy,I,'same');

grady=abs(grady);%计算图像的Laplacia水平梯度subplot(2,2,3),imshow(grady,[]);

title('图像的Laplacia水平梯度');

grad=gradx+grady;%得到图像的Laplacia梯度

subplot(2,2,4),imshow(grad,[]);

title('图像的Laplacia梯度');

图像的Laplacia水平梯度图像的Laplacia梯度

实验二频域图像增强

一、实验目的

(1)掌握基本的频域图像增强方法,观察图像增强的效果,加深理解;

(2)了解不同类型频域滤波器的特性;

(3)了解滤波器的截止频率对滤波效果的影响。

二、实验内容

(1)频率域平滑

(2)频率域锐化

三、实验要求

(1)用matlab语言进行仿真实验;

(2)递交实验报告,要求给出实验原理、源程序、实验结果及分析。

四、实验图像

五、具体实验内容及要求

1.频域平滑实验内容

(1)读入原图像test.tif并显示;

(2)采用理想低通滤波器对图像进行处理,并显示结果;

(3)采用二阶巴特沃斯低通滤波器对图像进行处理,并显示结果。

要求:

(1)观察截止频率分别为15、30、80时对滤波结果的影响。

(1.截止频率为15

I=imread('C:\图像\test.tif');

subplot(3,1,1),imshow(I)

title('原始图像')

f=double(I);

g=fft2(f);%fft2函数用于计算图像的快速傅立叶变换

g=fftshift(g);%fftshift可以用于调整fft2的输出结果,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心。

[M,N]=size(g);

n=2;

d0=15;%截止频率设为15

m0=fix(M/2);

n0=fix(N/2);

for i=1:M

for j=1:N

d=sqrt((i-m0)^2+(j-n0)^2);

h=1/(1+(d/d0)^(2*n));%计算二阶巴特沃斯低通滤波器的传递函数

result1(i,j)=h*g(i,j);%进行巴特沃斯低通滤波

if d>15%进行理想低通滤波

result2(i,j)=0;

else

result2(i,j)=g(i,j);

end

end

end

result1=ifftshift(result1);

J1=ifft2(result1);

X1=uint8(real(J1));

subplot(3,1,2),imshow(X1)

title('截止频率为15二阶巴特沃斯低通滤波图像')

result2=ifftshift(result2);

J2=ifft2(result2);

X2=uint8(real(J2));

subplot(3,1,3),imshow(X2)

title('截止频率为15理想低通滤波图像')

原始图像

截止频率为15二阶巴特沃斯低通滤波图像

截止频率为15理想低通滤波图像

2.截止频率为30

I=imread('C:\图像\test.tif');

subplot(3,1,1),imshow(I)

title('原始图像')

f=double(I);

g=fft2(f);%fft2函数用于计算图像的快速傅立叶变换

g=fftshift(g);%fftshift可以用于调整fft2的输出结果,将变换后的图像频谱中心从矩阵的原点移到矩阵的中心。

[M,N]=size(g);

n=2;

d0=30;%截止频率设为30

m0=fix(M/2);

n0=fix(N/2);

for i=1:M

for j=1:N

d=sqrt((i-m0)^2+(j-n0)^2);

h=1/(1+(d/d0)^(2*n));%计算二阶巴特沃斯低通滤波器的传递函数

result1(i,j)=h*g(i,j);%进行巴特沃斯低通滤波

if d>30%进行理想低通滤波

result2(i,j)=0;

else

result2(i,j)=g(i,j);

end

end

end

result1=ifftshift(result1);

J1=ifft2(result1);

X1=uint8(real(J1));

subplot(3,1,2),imshow(X1)

title('截止频率为30二阶巴特沃斯低通滤波图像')

result2=ifftshift(result2);

J2=ifft2(result2);

X2=uint8(real(J2));

subplot(3,1,3),imshow(X2)

title('截止频率为30理想低通滤波图像')

原始图像

截止频率为30二阶巴特沃斯低通滤波图像

截止频率为30理想低通滤波图像

3.截止频率为80

I=imread('C:\图像\test.tif');

subplot(3,1,1),imshow(I)

title('原始图像')

f=double(I);

g=fft2(f);%fft2函数用于计算图像的快速傅立叶变换

g=fftshift(g);%fftshift可以用于调整fft2的输出结果,将变换后的图像频谱中心

从矩阵的原点移到矩阵的中心。

[M,N]=size(g);

n=2;

d0=80;%截止频率设为80

m0=fix(M/2);

n0=fix(N/2);

for i=1:M

for j=1:N

d=sqrt((i-m0)^2+(j-n0)^2);

h=1/(1+(d/d0)^(2*n));%计算二阶巴特沃斯低通滤波器的传递函数

result1(i,j)=h*g(i,j);%进行巴特沃斯低通滤波

if d>80%进行理想低通滤波

result2(i,j)=0;

else

result2(i,j)=g(i,j);

end

end

end

result1=ifftshift(result1);

J1=ifft2(result1);

X1=uint8(real(J1));

subplot(3,1,2),imshow(X1)

title('截止频率为80二阶巴特沃斯低通滤波图像')

result2=ifftshift(result2);

J2=ifft2(result2);

X2=uint8(real(J2));

subplot(3,1,3),imshow(X2)

title('截止频率为80理想低通滤波图像')

原始图像

截止频率为80二阶巴特沃斯低通滤波图像

截止频率为80理想低通滤波图像

(2)比较理想低通滤波器和巴特沃斯低通滤波器的滤波效果。

实验结果分析:(1)理想的高通滤波器把半径为D0的圆内的所有频率完全衰减掉,却使圆外的所有的频率无损的通过。图像整体变得模糊,边缘和细节比较清晰。(2)巴特沃思高通滤波器和高斯高通滤波器处理后的图像中只显现边缘,边缘的强度不同,而灰度平滑的区域都变暗了。

实验小结:

原始图像中,包含有各种朝向的边缘。各种算子中的垂直模板得到的梯度图,由于梯度方向与边缘走向垂直,所以梯度图对水平边缘有较强的响应,水平部分等细节信息非常清析。由算子中的水平模板得到的梯度图,它对垂直边缘有较强的响应,垂直部分等垂直细节非常清晰。而最后得到的梯度图则把水平和垂直方向的特点结合在一起,水平和垂直细节都非常清晰。

通过横向和纵向比较几幅图像的锐化效果何以很直观的看到集中算子的效果差异,这对于我们以后再从事这方面的工作时如何选择锐化算子是个很好的提示。

matlab 图像的几何变换与彩色处理

实验四、图像的几何变换与彩色处理 一、实验目的 1理解和掌握图像的平移、垂直镜像变换、水平镜像变换、缩放和旋转的原理和应用; 2熟悉图像几何变换的MATLAB操作和基本功能 3 掌握彩色图像处理的基本技术 二、实验步骤 1 启动MATLAB程序,读入图像并对图像文件分别进行平移、垂直镜像变换、水平镜像变换、缩放和旋转操作 %%%%%%平移 >> flowerImg=imread('flower.jpg'); >> se=translate(strel(1),[100 100]); >> img2=imdilate(flowerImg,se); >> subplot(1,2,1); >> imshow(flowerImg); >> subplot(1,2,2); >> imshow(img2);

I1=imread('flower.jpg'); I1=double(I1); H=size(I1); I2(1:H(1),1:H(2),1:H(3))=I1(H(1):-1:1,1:H(2),1:H(3)); I3(1:H(1),1:H(2),1:H(3))=I1(1:H(1),H(2):-1:1,1:H(3)); Subplot(2,2,1); Imshow(uint8(I1)); Title('原图'); Subplot(2,2,2); Imshow(uint8(I3)); Title('水平镜像'); Subplot(2,2,3); Imshow(uint8(I2)); Title('垂直镜像'); img1=imread('flower.jpg'); figure,imshow(img1); %%%%%%缩放 img2=imresize(img1,0.25); figure,imshow(img2); imwrite(img2,'a2.jpg');

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

laplace(拉普拉斯)锐化matlab程序

laplace(拉普拉斯)锐化matlab程序 部门: xxx 时间: xxx 整理范文,仅供参考,可下载自行编辑

第二次作业 201821050326 程小龙 习题: 4.8 答:参考教材4.4-1式,高通滤波器可以看成是1减去相应低通滤波器,从低通滤波器的性质可以看出,在空间域上低通滤波器在原点是存在一个尖峰,且大于0,1是看成直流分量,因此,傅里叶逆变换之后的高通滤波器在空间域上原点就会出现负的尖峰。 b5E2RGbCAP 4.15 答:

方便起见,我们考虑一个变量。当u从0增加到M,H(u,v>从最大值2j<复数)然后减少,当u=M/2时<转移方程的中心)最小;当u 继续增加,H(u,v>继续增加,且当u=M时,又取得最大值。同样,考虑两个变量也得到类似的结果。这种特性就是我们的高通滤波器,于是我们就可以得到我们推导出的滤波器H点,将会产生只有平均值为0的图像,所以,存在一个K值,使得经过K次高通滤波之后就会产生一副像素不变的图像。DXDiTa9E3d

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

数字图像处理_边缘检测算子与锐化算子(含MATLAB代码)

数字图像处理实验五 15生医 一、实验内容 对某一灰度图像,进行如下处理: (1)分别用Roberts、Prewitt和Sobel边缘检测算子进行边缘检测;(2)将Roberts、Prewitt和Sobel边缘检测算子修改为锐化算子,对原图像进行锐化,同屏显示原图像、边缘检测结果和锐化后图像,说明三者之间的关系。一灰度图像的二值化。 二、运行环境 MATLAB R2014a 三、运行结果及分析 运行结果如图所示:可以观察出原图像、边缘检测结果和锐化后图像三者之间的关系为:原图像+边缘检测结果=锐化后图像 四、心得体会 通过MATLAB编程更加熟悉了课本上关于锐化与边缘检测的相关知识

点,对二者的关系也有了具体的认识。同时,对MATLAB图像导入函数、图像边缘检测函数、锐化窗口矩阵卷积函数的调用及实现机理也有所掌握,比如后边附的程序中会提到的“%”标注的思考。 五、具体程序 size=512; Img_rgb=imread('E:\lena.jpg'); %读取图像 Img_gray=rgb2gray(Img_rgb); %进行RGB到灰度图像的转换(虽然原来在网上下载的lena就是黑白图像,但是这一步必须要有!否则处理结果不正确) figure(1); subplot(2,3,1); imshow(Img_gray); title('原图像'); Img_edge=zeros(size); a={'roberts','prewitt','sobel'}; for i=1:3 Img_edge=edge(Img_gray,a{i}); figure(1); subplot(2,3,i+1); imshow(Img_edge); axis image; title(a(i)); end A=imread('E:\lena.jpg'); B=rgb2gray(A); B=double(B); Window=[-1 -1 -1;-1 9 -1;-1 -1 -1]; %八邻域拉普拉斯锐化算子(α取1) C=conv2(B,Window,'same'); Img_sharp=uint8(C); subplot(2,3,5); imshow(Img_sharp); title('sharp');

利用laplacian算子对图像进行锐化操作

利用laplacian算子对图像进行锐化操作 人机交互实验报告 班级:计0905 姓名:车雨欣 学号:20091221018

利用laplacian算子对图像进行锐化操作Laplacian算子定义 Laplacian 算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度()的散度()。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义为: (1) f的拉普拉斯算子也是笛卡儿坐标系xi中的所有非混合二阶偏导数: (2) 作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥2。表达式(1)(或(2))定义了一个算子Δ: C(R) →C(R),或更一般地,定义了一个算子Δ : C(Ω) → C(Ω),对于任何开集Ω。 运算模板 函数的拉普拉斯算子也是该函数的黑塞矩阵的迹,可以证明,它具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。如果邻域系统是4 邻域,Laplacian 算子的模板为: 0 1 0 1 -4 1 0 1 0

如果邻域系统是8 邻域,Laplacian 算子的模板为: 1 1 1 1 -8 1 1 1 1 前面提过,Laplacian 算子对噪声比较敏感,所以图像一般先经过平滑处理,因为平滑处理也是用模板进行的,所以,通常的分割算法都是把Laplacian 算子和平滑算子结合起来生成一个新的模板。图像 图像最基本的特征是边缘。所谓边缘是指周围像素有阶跃变化或屋顶状变化的那些象素的集合。他存在于目标与背景、目标与目标、区域与区域、基元与基元之间,因此他是图像分割所依赖的最重要的特征,他两边象素的灰度值有显著不同;其二是屋顶装边缘,他位于灰度值从增加到减少的变化转折点。 图像边缘检测 一种定位二维或三维图像(特别是医学图像)中的对象的边缘的系统。通过输入端(310)接收表示该图像的各元素值的数据元素集。该数据集被存储在存储装置(320)中。处理器(340)确定该图像中的对象的边缘。该处理器计算所述数据元素的至少一阶和/或二阶导数,并且计算该图像的等照度线曲率,所述曲率由κ

opencv摄像机标定代码

// cvCalib.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include void InitCorners3D(CvMat *Corners3D, CvSize ChessBoardSize, int Nimages, float SquareSize); int image_width = 768; int image_height = 576;//待标定图片的大小 const int ChessBoardSize_w = 7; const int ChessBoardSize_h = 7;//图片中可标定的角数 const CvSize ChessBoardSize = cvSize(ChessBoardSize_w,ChessBoardSize_h); const int NPoints = ChessBoardSize_w*ChessBoardSize_h;//角点个数 const int NImages=6;//待标定的图片数 int corner_count[NImages] = {0}; float SquareWidth = 10; //棋盘格子的边长,可任意设定,不影响内参数 CvMat *intrinsics; CvMat *distortion_coeff; CvMat *rotation_vectors; CvMat *translation_vectors; CvMat *object_points; CvMat *point_counts; CvMat *image_points; void main() { IplImage *current_frame_rgb; IplImage *current_frame_gray; IplImage *chessBoard_Img; CvPoint2D32f corners[NPoints*NImages]; chessBoard_Img =cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); current_frame_gray = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 1); current_frame_rgb = cvCreateImage(cvSize(image_width, image_height), IPL_DEPTH_8U, 3); int captured_frames=0;

实验报告四图像锐化处理

姓名:学号:班级: 实验日期:实验成绩: 一.实验目的 (1)学习如何用锐化处理技术来加强图像的目标边界和图像细节,对图像进行梯度算子、拉普拉斯算子、Sobel算子设计,使图 像的某些特征(如边缘、轮廓等)得以进一步的增强及突出。(2)分析模板大小对空域锐化滤波的影响,比较不同滤波器的处理效果,分析其优缺点。 二.实验原理 锐化处理的主要目的是突出灰度的过度部分,在空间域中,均值滤波类似于积分,那锐化滤波类似于微分,微分算子的响应程度与图像在用算子操作的这一点突变程度成正比,图像积分模糊了图像,同时起到了消除噪声的作用;图像微分增强边缘和其它突变(如噪声),而削弱灰度变换缓慢的区域,laplacian算子类似于二阶微分,强调的是图像灰度级剧烈变换的部分,而sobel算子类似于一阶微分,强调的是图像灰度级缓慢变化的部分。 三.实验内容及结果

(1)选择一副图像,分别使用拉普拉斯算子、sobel算子对图像进行锐化滤波,并观察滤波效果。 图 1 laplacian及sobel算子处理图像 (2)选择一副图像,构造一个中心系数为-24的5×5的类似于拉普拉斯模板对图像进行锐化,与上述拉普拉斯算子的结果相比,是否能得到更加清晰的结果? 图 2 不同大小laplacian模板处理原图及二值图 四.结果分析

(1)观察图一,可以发现对原图进行sobel算子运算后,原图阶梯的边缘细节被突显出来了,而每个阶梯灰度级保持不变的背景则没了,全变黑了,而对原图进行laplacian算子运算后,边缘部分则只剩下些杂乱无章的点了,基本是在sobel算子运算过后筛选出来的缓慢突变边缘上的一些突变更快的点。如果把sobel算子比作是一阶微分就不难理解它是对原图的缓慢边缘变化部分,而把laplacian算子比作是二阶微分的话,就是原图的剧烈突变部分,由于原图像的阶梯边缘在灰度级上是缓慢过度的,所以使用sobel算子边缘的突出效果更明显,而laplacian算子无论模板大小为多大,都不能清晰的显示出边缘。至于背景为什么会变黑是因为算子模板中有负因子,当计算的出来的值为负数时,自动标定其为0,也就是黑色。 (2)观察图二,可以发现对原图使用无论多大的laplacian模板,效果都很差,原因就是上述提到的原图像的边缘灰度级是缓慢变化的,对原图灰度级二值化处理,由于灰度值大小只有0和1两个值,阶梯边缘两边的值分别为0和1,这样边缘突变就成了一个单位的剧烈突变,所以3*3的laplacian算子效果就和上述的sobel算子效果相似,而当增加laplacian算子的大小到5*5时,边缘检测效果更加明显。正印证了微分算子的响应程度与图像在用算子操作的这一点突变程度成正比这一原理。

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

基于opencv2.0的车牌检测与字符分割的代码

本程序主要实现的是车牌的定位与检测 主要是利用申继龙论文里面的方法 1、采集得到的图像 2、把RGB图像转换成HSI彩色图像 3、利用设定的H、S阈值得到二值图像 4、对二值图像水平投影获得候选区域 5、对候选区域的HSI图像边缘检测 */ #include "stdafx.h" #include "opencv2/opencv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/nonfree/features2d.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/legacy/legacy.hpp" #include "opencv2/legacy/compat.hpp" #include #include #include #include #include #include #include #include #include using namespace std; using namespace cv; #define pi 3.14159265 IplImage* srcImage=NULL;//存储原图片 IplImage*srcImage1=NULL;//存储原始图片的副本 IplImage* HSI=NULL; static IplImage* grayImage=NULL;//存储原图片灰度图 static double posdouble=0.0; IplImage* channelOneImage=NULL; IplImage* channelTwoImage=NULL; IplImage* channelThreeImage=NULL; IplImage* plateImage=NULL;//存储车牌图像 IplImage* grayPlateImage=NULL;//存储车牌灰度图像 vectorcharacterImageList;//存储7个车牌字符图像的容器vectorxList;//存储7个车牌字符的起始和结束位置

MATLAB 实现数字图像锐化处理

MATLAB 实现数字图像锐化处理 摘要:讨论了数字图像增强技术中空域图像锐化的四种算法及其用MATLAB的实现;同时给出了利用四种算法进行图像锐化后的对照图像。比较实验结果,可知运用算法锐化处理后,图像比原来图像清晰。 关键词:MATLAB、线性锐化、非线性锐化、sobel算子、prewitt算子、log算子 1.引言 MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际运用中MATLAB 中的绝大多数的运算都是通过矩阵这一形式进行的,这一特点决定了MATLAB 在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而计算机对图像进行数字处理时,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。 二维图像均匀采样,可得到一幅离散化成M ×N 样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的。而MATLAB 的长处就是处理矩阵运算,因此用MATLAB 处理数字图像非常的方便。MATLAB 支持五种图像类型,即索引图像、灰度图像、二值图像、RGB 图像和多帧图像阵列;支持BMP,GIF,HDF,JPEG,PCX,PNG,XWD,CUR,ICO等图像文件格式的读、写和显示。MATLAB 对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作口。 数字图像处理中图像锐化的目的有两个:一是增强图像的边缘,使模糊的图像变得清晰起来;这种模糊不是由于错误操作,就是特殊图像获取方法的固有影响。二是提取目标物体的边界,对图像进行分割,便于目标区域的识别等。通过图像的锐化,使得图像的质量有所改变,产生更适合人观察和识别的图像。 2.数字图像的锐化 数字图像的锐化可分为线性锐化滤波和非线性锐化滤波。如果输出像素是输入像素领域像素的线性组合则称为线性滤波,否则称为非线性滤波。 2.1线性锐化滤波器 线性高通滤波器是最常用的线性锐化滤波器。这种滤波器必须满足滤波器的中心系数为正数,其他系数为负数。线性高通滤波器3 ×3 模板的典型系数如表1 所示: 表 1 用线性高通滤波实现图像锐化的程序和图像如下: F=imread('F:/text.png'); %读入图像 f=rgb2gray(F); h=double(f); %转化为double类型 g=[-1 -1 -1; -1 8 -1; -1 -1 -1];%线性高通滤波3×3 模板

图像处理实验报告-图像锐化

一、实验目的: ①掌握图像锐化的概念; ②掌握Prewitt 算子对图像进行锐化的原理、过程; ③熟悉Matlab 编程。 二、实验内容: ①利用Prewitt 算子对图像进行锐化处理; ②掌握Maltab 中和图像锐化相关的函数。 三、实验原理: ①利用Prewitt 算子对图像进行锐化处理; ②掌握Maltab 中和图像锐化相关的函数。 三、实验原理: 图像锐化处理是改善图像视觉效果的手段,用来对图像的轮廓或边缘进行增强,减弱或消除低分频率分量而不影响高频分量。图像锐化处理的主要技术体现在空域和频域的高通滤波,而空域高通滤波主要用模版卷积来实现。 (一)梯度算子法 在图像处理中,一阶导数通过梯度来实现,因此利用一阶导数检测边缘点的方法就称为梯度算子法。梯度值正比于像素之差。对于一幅图像中突出的边缘区,其梯度值较大;在平滑区域梯度值小;对于灰度级为常数的区域,梯度为零。 下面给出的平滑梯度算子法具有噪声抑制作用。 1、Prewitt 梯度算子法(平均差分法) 因为平均能减少或消除噪声,Prewitt 梯度算子法就是先求平均,再求差分来求梯度。水平和垂直梯度模板分别为: 利用检测模板可求得水平和垂直方向的梯度,再通过梯度合成和边缘点判定,就可得到平均差分法的检测结果。 四、实验步骤: I=imread('Miss.bmp'); figure; imshow(I); title('原始图像'); II=eye(258,258); for i=2:257 for j=2:257 ??????????---=?101101101x d ??????????---=?111000111y d

基于opencv的人脸识别程序-代码详解

#include "cv.h" #include "highgui.h" #include #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )//如果没有找到分类器,输出以下 { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); fprintf( stderr, "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" ); return -1;

基于Sobel算子的图像锐化偏微分方程图像处理

基于偏微分方程的图象处理课程设计 (2014年秋季学期) 学院 专业信息与计算科学 班级信计12-1班 名称基于Sobel算子的图像锐化 组员 指导教师 2014 年月日 一、目的与要求 《图像处理》就是信息与计算科学专业一门重要的基础课程之一,它主要应用在医疗、生物等学科的图象处理方面,就是当今社会发展较为迅速的一门技术。课程设计的一个重要的环节就是实践环节,主要锻炼学生的动手能力,以及团队能力,独立思考能力等。 二、设计的方案 2、1模型的建立 Sobel算子 (加权平均差分法) Sobel算子就是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。 -1 0 1

与一些传统的图像锐化方法相比,基于sobel 算子的锐化在诸多方面都得到了改进,这些也成了sobel 算子发展的有力保证,sobel 算子的具体定义如下: Dx=[f(x+1,y-1)-f(x-1,y-1)]+2[f(x+1,y)-f(x-1,y)]+[f(x+1,y+1)-f(x-1,y+1)], Dy=[f(x-1,y+1)-f(x-1,y-1)]+2[f(x,y+1)-f(x,y-1)]+[f(x+1,y+1)-f(x+1,y-1)]、 Sobel 算子也可用模版表示,如图2所示,模版中的元素表示算式中相应像素的加权因子。 101202102-????-????-?? 121000121---?????????? 图2 2、2模型的实现 由于sobel 算子就是相隔两行或两列之差分,故边缘两侧元素得到增强,同时由于sobel 算子引入了平均元素,对图像中的随机噪声有一定的平滑作用,所以离散化采用sobel 算子,同时以sobel 算子较强的锐化作用达到锐化目的 三、主要实现程序 ( MATLAB ) 命令: >> W_H1=[-1,0,1;-2,0,2;-1,0,1]; >> W_H2=[-1,-2,-1;0,0,0;1,2,1]; >> T=0、165; >> L=imread('1、bmp','bmp'); >> %L=imread('1、tif','tif'); >> [height,width]=size(L); >> L1=double(L); >> L2=zeros(height+2,width+2); >> L2(2:height+1,2:width+1)=L1; >> for i=2:height+1 for j=2:width+1 sum1=0; sum2=0; for m=-1:1 for n=-1:1

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.360docs.net/doc/8c17110419.html,/technology/computing/opencv/?软件下载: https://www.360docs.net/doc/8c17110419.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

相关文档
最新文档