【C++】图像处理中的微分算子原理与实现

图像处理中的微分算子原理与实现

一阶微分边缘算子:经典算子比如:Roberts(罗伯特)、Prewitt(普鲁伊特)、Sobel(索贝尔),Canny(坎尼)等。
二阶微分边缘算子:Laplacian算子,LoG( Laplace of Gaussian function)边缘检测算子和DoG(Difference of Gaussian)高斯差分算子。
在这里插入图片描述

  • Roberts算子

1963年,Roberts算子,又称罗伯茨算子,是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子。他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘,定位精度高,对噪声敏感,无法抑制噪声的影响。
Roberts算子的模板分为水平方向和垂直方向,如下式所示,从其模板可以看出,Roberts算子能较好的增强正负45度的图像边缘。
请添加图片描述

void quick_opencv::roberts_Demo(Mat &img)
{
	// Roberts算子边缘检测
	cvtColor(img,img,COLOR_BGR2GRAY);
	Mat grad;
	grad.create(img.size(), CV_8UC1);
	for (int i = 1; i < img.rows - 1; i++)
	{
		for (int j = 1; j < img.cols - 1; j++)
		{
			grad.at<uchar>(i, j) = saturate_cast<uchar>(fabs(img.at<uchar>(i, j) - img.at<uchar>(i - 1, j - 1)) + fabs(img.at<uchar>(i, j - 1) - img.at<uchar>(i - 1, j)));
		}
	}
	imshow("Roberts算子", grad);
}
  • Prewitt算子

1970年,Prewitt算子来自J.M.S. Prewitt “Object Enhancement and Extraction” in “Picture processing and Psychopictorics”, Academic Press
Prewitt算子是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用 33 模板对区域内的像素值进行计算,而Robert算子的模板为 22,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像,其计算公式如下所示:
请添加图片描述

void getPrewitt_oper(Mat& getPrewitt_horizontal, Mat& getPrewitt_vertical, Mat& getPrewitt_Diagonal1, Mat& getPrewitt_Diagonal2) {
	//水平方向
	getPrewitt_horizontal = (Mat_<float>(3, 3) << -1, -1, -1, 0, 0, 0, 1, 1, 1);
	//垂直方向
	getPrewitt_vertical = (Mat_<float>(3, 3) << -1, 0, 1, -1, 0, 1, -1, 0, 1);
	//对角135°
	getPrewitt_Diagonal1 = (Mat_<float>(3, 3) << 0, 1, 1, -1, 0, 1, -1, -1, 0);
	//对角45°
	getPrewitt_Diagonal2 = (Mat_<float>(3, 3) << -1, -1, 0, -1, 0, 1, 0, 1, 1);

	//逆时针反转180°得到卷积核
	flip(getPrewitt_horizontal, getPrewitt_horizontal, -1);
	flip(getPrewitt_vertical, getPrewitt_vertical, -1);
	flip(getPrewitt_Diagonal1, getPrewitt_Diagonal1, -1);
	flip(getPrewitt_Diagonal2, getPrewitt_Diagonal2, -1);
}

void edge_Prewitt(Mat& src, Mat& dst1, Mat& dst2, Mat& dst3, Mat& dst4, Mat& dst, int ddepth, double delta = 0, int borderType = BORDER_DEFAULT) {
	//获取Prewitt算子
	Mat getPrewitt_horizontal;
	Mat getPrewitt_vertical;
	Mat getPrewitt_Diagonal1;
	Mat getPrewitt_Diagonal2;
	getPrewitt_oper(getPrewitt_horizontal, getPrewitt_vertical, getPrewitt_Diagonal1, getPrewitt_Diagonal2);

	//卷积得到水平方向边缘
	filter2D(src, dst1, ddepth, getPrewitt_horizontal, Point(-1, -1), delta, borderType);

	//卷积得到4垂直方向边缘
	filter2D(src, dst2, ddepth, getPrewitt_vertical, Point(-1, -1), delta, borderType);

	//卷积得到45°方向边缘
	filter2D(src, dst3, ddepth, getPrewitt_Diagonal1, Point(-1, -1), delta, borderType);

	//卷积得到135°方向边缘
	filter2D(src, dst4, ddepth, getPrewitt_Diagonal2, Point(-1, -1), delta, borderType);

	//边缘强度(近似)
	convertScaleAbs(dst1, dst1); //求绝对值并转为无符号8位图
	convertScaleAbs(dst2, dst2);

	convertScaleAbs(dst3, dst3); //求绝对值并转为无符号8位图
	convertScaleAbs(dst4, dst4);
	dst = dst1 + dst2;

}

void quick_opencv::prewitt_Demo(Mat &img)
{
	Mat dst, dst1, dst2, dst3, dst4;
	cvtColor(img, img, COLOR_BGR2GRAY);
	//注意:要采用CV_32F,因为有些地方卷积后为负数,若用8位无符号,则会导致这些地方为0
	edge_Prewitt(img, dst1, dst2, dst3, dst4, dst, CV_32F);

	namedWindow("水平边缘", WINDOW_NORMAL);
	imshow("水平边缘", dst1);
	namedWindow("垂直边缘", WINDOW_NORMAL);
	imshow("垂直边缘", dst2);
	namedWindow("45°边缘", WINDOW_NORMAL);
	imshow("45°边缘", dst3);
	namedWindow("135°边缘", WINDOW_NORMAL);
	imshow("135°边缘", dst4);
	namedWindow("边缘强度", WINDOW_NORMAL);
	imshow("边缘强度", dst);
}
  • Sobel算子

1973年,Sobel边缘算子,当年作者并没有公开发表过论文,仅仅是在一次博士生课题讨论会(1968)上提出(“A 3x3 Isotropic Gradient Operator for Image Processing”),后在1973年出版的一本专著(“Pattern Classification and Scene Analysis”)的脚注里作为注释出现和公开的。
Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分求导(分化),因此结果会具有更多的抗噪性,当对精度要求不是很高时,Sobel算子是一种较为常用的边缘检测方法。

Sobel算子的边缘定位更准确,常用于噪声较多、灰度渐变的图像。其算法模板如下面的公式所示,其中 表示水平方向, 表示垂直方向。
请添加图片描述

void quick_opencv::sobel_Demo(Mat &img)
{
	cvtColor(img, img, COLOR_BGR2GRAY);
	Mat imageX = Mat::zeros(img.size(), CV_16SC1);
	Mat imageY = Mat::zeros(img.size(), CV_16SC1);
	Mat imageXY = Mat::zeros(img.size(), CV_16SC1);
	Mat imageX8UC;
	Mat imageY8UC;
	Mat imageXY8UC;

	GaussianBlur(img, img, Size(3, 3), 0); //高斯滤波器(模糊/平滑/近似)消除噪点
	uchar *P = img.data;
	uchar *PX = imageX.data;  
	uchar *PY = imageY.data;
	int step = img.step;
	int stepXY = imageX.step;
	for (int i = 1;i < img.rows - 1;i++)
	{
		for (int j = 1;j < img.cols - 1;j++)
		{
			// 通过指针遍历图像上每一个像素
			// 求出X,Y方向的导数(梯度) sobel算子加权的结果
			PX[i*imageX.step + j * (stepXY / step)] = abs(P[(i - 1)*step + j + 1] + P[i*step + j + 1] * 2 + P[(i + 1)*step + j + 1] - P[(i - 1)*step + j - 1] - P[i*step + j - 1] * 2 - P[(i + 1)*step + j - 1]);
			PY[i*imageX.step + j * (stepXY / step)] = abs(P[(i + 1)*step + j - 1] + P[(i + 1)*step + j] * 2 + P[(i + 1)*step + j + 1] - P[(i - 1)*step + j - 1] - P[(i - 1)*step + j] * 2 - P[(i - 1)*step + j + 1]);
		}
	}
	addWeighted(imageX, 0.5, imageY, 0.5, 0, imageXY);//融合X、Y方向的梯度	
	convertScaleAbs(imageX, imageX8UC);
	convertScaleAbs(imageY, imageY8UC);
	convertScaleAbs(imageXY, imageXY8UC);   //转换为8bit图像

	Mat imageSobel;
	Mat x_grad, y_grad;
	Sobel(img, x_grad, CV_16S, 1, 0, 3);
	Sobel(img, y_grad, CV_16S, 0, 1, 3);
	convertScaleAbs(x_grad, x_grad);
	convertScaleAbs(y_grad, y_grad);
	addWeighted(x_grad, 0.5, y_grad, 0.5, 0, imageSobel);

	imshow("Source Image", img);
	imshow("X Direction", imageX8UC);
	imshow("Y Direction", imageY8UC);
	imshow("XY Direction", imageXY8UC);
	imshow("Opencv Soble", imageSobel);
}
  • Canny算子

1986年,Canny边缘检测算子是John F. Canny开发出来的一个多级边缘检测算法。更为重要的是Canny创立了“边缘检测计算理论”(computational theory of edge detection)解释这项技术如何工作。到今天已经30多年过去了,但Canny算法仍然是图像边缘检测算法中最经典、先进的算法之一。
1、高斯平滑
2、计算梯度幅度和方向
可选用的模板:soble算子、Prewitt算子、Roberts模板等等;
一般采用soble算子,OpenCV也是如此,利用soble水平和垂直算子与输入图像卷积计算dx、dy
3、根据角度对幅值进行非极大值抑制
沿着梯度方向对幅值进行非极大值抑制,而非边缘方向
请添加图片描述
在每一点上,领域中心 x 与沿着其对应的梯度方向的两个像素相比,若中心像素为最大值,则保留,否则中心置0,这样可以抑制非极大值,保留局部梯度最大的点,以得到细化的边缘。
4、用双阈值算法检测和连接边缘
选取系数TH和TL,比率为2:1或3:1。(一般取TH=0.3或0.2,TL=0.1);
将小于低阈值的点抛弃,赋0;将大于高阈值的点立即标记(这些点为确定边缘点),赋1或255;
将小于高阈值,大于低阈值的点使用8连通区域确定(即:只有与TH像素连接时才会被接受,成为边缘点,赋 1或255)

void quick_opencv::canny_Demo(Mat &img)
{
	ConvertRGB2GRAY(img, imageGray); //RGB转换为灰度图  
	imshow("Gray Image", imageGray);
	int size = 5; //定义卷积核大小  
	double **gaus = new double *[size];  //卷积核数组  
	for (int i = 0;i < size;i++)
	{
		gaus[i] = new double[size];  //动态生成矩阵  
	}
	GetGaussianKernel(gaus, 5, 1); //生成5*5 大小高斯卷积核,Sigma=1;  
	imageGaussian = Mat::zeros(imageGray.size(), CV_8UC1);
	GaussianFilter(imageGray, imageGaussian, gaus, 5);  //高斯滤波  
	imshow("Gaussian Image", imageGaussian);
	Mat imageSobelY;
	Mat imageSobelX;
	double *pointDirection = new double[(imageSobelX.cols - 1)*(imageSobelX.rows - 1)];  //定义梯度方向角数组  
	SobelGradDirction(imageGaussian, imageSobelX, imageSobelY, pointDirection);  //计算X、Y方向梯度和方向角  
	imshow("Sobel Y", imageSobelY);
	imshow("Sobel X", imageSobelX);
	Mat SobelGradAmpl;
	SobelAmplitude(imageSobelX, imageSobelY, SobelGradAmpl);   //计算X、Y方向梯度融合幅值  
	imshow("Soble XYRange", SobelGradAmpl);
	Mat imageLocalMax;
	LocalMaxValue(SobelGradAmpl, imageLocalMax, pointDirection);  //局部非极大值抑制  
	imshow("Non-Maximum Image", imageLocalMax);
	Mat cannyImage;
	cannyImage = Mat::zeros(imageLocalMax.size(), CV_8UC1);
	DoubleThreshold(imageLocalMax, 90, 160);        //双阈值处理  
	imshow("Double Threshold Image", imageLocalMax);
	DoubleThresholdLink(imageLocalMax, 90, 160);   //双阈值中间阈值滤除及连接  
	imshow("Canny Image", imageLocalMax);
}
  • Laplace算子

1812年,拉普拉斯(Laplace, 1749 – 1827)发表了重要的《概率分析理论》一书,在该书中总结了当时整个概率论的研究,论述了概率在选举审判调查、气象等方面的应用,导入「拉普拉斯变换」等。
拉普拉斯(Laplacian) 算子是 维欧几里德空间中的一个二阶微分算子,常用于图像增强领域和边缘提取。它通过灰度差分计算邻域内的像素。

算法基本流程

1)判断图像中心像素灰度值与它周围其他像素的灰度值,如果中心像素的灰度更高,则提升中心像素的灰度;反之降低中心像素的灰度,从而实现图像锐化操作;
2)在算法实现过程中,Laplacian算子通过对邻域中心像素的四方向或八方向求梯度,再将梯度相加起来判断中心像素灰度与邻域内其他像素灰度的关系;
3)最后通过梯度运算的结果对像素灰度进行调整。
Laplacian算子分为四邻域和八邻域,四邻域是对邻域中心像素的四个方向求梯度,八邻域是对八个方向求梯度。
其中,Laplacian算子四邻域模板如下所示:请添加图片描述
Laplacian算子的八邻域模板如下所示:
请添加图片描述
通过Laplacian算子的模板可以发现:
1)当邻域内像素灰度相同时,模板的卷积运算结果为0;
2)当中心像素灰度高于邻域内其他像素的平均灰度时,模板的卷积运算结果为正数;
3)当中心像素的灰度低于邻域内其他像素的平均灰度时,模板的卷积为负数。对卷积运算的结果用适当的衰弱因子处理并加在原中心像素上,就可以实现图像的锐化处理。

void quick_opencv::laplacian_Demo(Mat &img)
{
	Mat src_gray;
	int kernel_size = 3;
	const char* window_name = "Laplacian Demo";

	cvtColor(img, src_gray, COLOR_RGB2GRAY);
	namedWindow(window_name, WINDOW_AUTOSIZE);

	Mat dst, abs_dst;
	Laplacian(src_gray, dst, CV_16S, kernel_size);
	convertScaleAbs(dst, abs_dst);
	imshow(window_name, abs_dst);
}
  • LoG算子

1980年,LoG边缘检测算子是David Courtnay Marr和Ellen Hildreth共同提出的,因此,也称为Marr & Hildreth 边缘检测算法或Marr & Hildreth算子。该算法首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数。即图像与 Laplacian of the Gaussian function 进行滤波运算。最后,可以通过检测滤波结果的零交叉(Zero crossings)获得图像或物体的边缘。因而,也被业界简称为Laplacian-of-Gaussian (LoG)算子。Log算子的表达式如下:请添加图片描述
常用的卷积模板是5*5的模板:
请添加图片描述

void quick_opencv::LOG_Demo(Mat &img)
{
	//高斯-拉普拉斯算子 二阶微分 用于边缘检测
	Mat src_gray;
	int kernel_size = 3;
	const char* window_name = "LOG Demo";
	
	GaussianBlur(img, img, Size(3, 3), 0, 0, BORDER_DEFAULT);
	cvtColor(img, src_gray, COLOR_RGB2GRAY);
	namedWindow(window_name, WINDOW_AUTOSIZE);

	Mat dst, abs_dst;
	Laplacian(src_gray, dst, CV_16S, kernel_size);
	convertScaleAbs(dst, abs_dst);
	imshow(window_name, abs_dst);
}
  • DoG算子

1980年,高斯差分(DoG)算子,Marr and Hildreth指出,使用高斯差分(DOG)来近似Log算子是可能的:
请添加图片描述
LoG算子和DoG算子的函数波形对比如下图所示,由于高斯差分的计算更加简单,因此可用DoG算子近似替代LoG算子:
请添加图片描述

//x,y方向联合实现获取高斯模板

void generateGaussMask(Mat& Mask, Size wsize, double sigma) {
	Mask.create(wsize, CV_64F);
	int h = wsize.height;
	int w = wsize.width;
	int center_h = (h - 1) / 2;
	int center_w = (w - 1) / 2;
	double sum = 0.0;
	double x, y;
	for (int i = 0; i < h; ++i) {
		y = pow(i - center_h, 2);
		for (int j = 0; j < w; ++j) {
			x = pow(j - center_w, 2);
			//因为最后都要归一化的,常数部分可以不计算,也减少了运算量
			double g = exp(-(x + y) / (2 * sigma*sigma));
			Mask.at<double>(i, j) = g;
			sum += g;
		}
	}
	Mask = Mask / sum;
}


//按二维高斯函数实现高斯滤波

void GaussianFilter(Mat& src, Mat& dst, Mat window) {
	int hh = (window.rows - 1) / 2;
	int hw = (window.cols - 1) / 2;
	dst = Mat::zeros(src.size(), src.type());
	//边界填充
	Mat Newsrc;
	copyMakeBorder(src, Newsrc, hh, hh, hw, hw, BORDER_REPLICATE);//边界复制

	//高斯滤波
	for (int i = hh; i < src.rows + hh; ++i) {
		for (int j = hw; j < src.cols + hw; ++j) {
			double sum[3] = { 0 };

			for (int r = -hh; r <= hh; ++r) {
				for (int c = -hw; c <= hw; ++c) {
					if (src.channels() == 1) {
						sum[0] = sum[0] + Newsrc.at<uchar>(i + r, j + c) * window.at<double>(r + hh, c + hw);
					}
					else if (src.channels() == 3) {
						Vec3b rgb = Newsrc.at<Vec3b>(i + r, j + c);
						sum[0] = sum[0] + rgb[0] * window.at<double>(r + hh, c + hw);//B
						sum[1] = sum[1] + rgb[1] * window.at<double>(r + hh, c + hw);//G
						sum[2] = sum[2] + rgb[2] * window.at<double>(r + hh, c + hw);//R
					}
				}
			}

			for (int k = 0; k < src.channels(); ++k) {
				if (sum[k] < 0)
					sum[k] = 0;
				else if (sum[k] > 255)
					sum[k] = 255;
			}
			if (src.channels() == 1)
			{
				dst.at<uchar>(i - hh, j - hw) = static_cast<uchar>(sum[0]);
			}
			else if (src.channels() == 3)
			{
				Vec3b rgb = { static_cast<uchar>(sum[0]), static_cast<uchar>(sum[1]), static_cast<uchar>(sum[2]) };
				dst.at<Vec3b>(i - hh, j - hw) = rgb;
			}

		}
	}

}


//DOG高斯差分

void DOG1(Mat &src, Mat &dst, Size wsize, double sigma, double k = 1.6) {
	Mat Mask1, Mask2, gaussian_dst1, gaussian_dst2;
	generateGaussMask(Mask1, wsize, k*sigma);//获取二维高斯滤波模板1
	generateGaussMask(Mask2, wsize, sigma);//获取二维高斯滤波模板2

	//高斯滤波
	GaussianFilter(src, gaussian_dst1, Mask1);
	GaussianFilter(src, gaussian_dst2, Mask2);

	dst = gaussian_dst1 - gaussian_dst2 - 1;

	threshold(dst, dst, 0, 255, THRESH_BINARY);
}



//DOG高斯差分--使用opencv的GaussianBlur

void DOG2(Mat &src, Mat &dst, Size wsize, double sigma, double k = 1.6) {
	Mat gaussian_dst1, gaussian_dst2;
	//高斯滤波
	GaussianBlur(src, gaussian_dst1, wsize, k*sigma);
	GaussianBlur(src, gaussian_dst2, wsize, sigma);

	dst = gaussian_dst1 - gaussian_dst2;
	threshold(dst, dst, 0, 255, cv::THRESH_BINARY);
}

// 实现

void quick_opencv::DOG_Demo(Mat &img)
{
	if (img.channels() > 1) cv::cvtColor(img, img, COLOR_BGR2GRAY);
	Mat edge1, edge2;
	DOG1(img, edge1, cv::Size(7, 7), 2);
	DOG2(img, edge2, cv::Size(7, 7), 2);

	namedWindow("My_DOG", WINDOW_NORMAL);
	imshow("My_DOG", edge1);

	namedWindow("Opencv_DOG", WINDOW_NORMAL);
	imshow("Opencv_DOG", edge2);

}
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
智能图像处理技术 作者:李弼程 出版社:电子工业出版社 ISBN:712100047 原价: ¥32 图书简介 本书主要论述了智能图像处理技术,系统介绍了智能图像处理技术的有代表性的思想、算法与应用,跟踪了图像处理技术的发展前沿。全书共分为15章,重点讨论了图像边缘检测、图像分割、图像特征分析、图像配准、图像融合、图像分类、图像识别、基于内容的图像检索与图像数字水印。此外,为了内容的完整性,本书还介绍了图像预处理技术,如图像采集、图像变换、图像增强、图像恢复、图像编码与压缩。  图书目录 第1章 绪论 1.1 图像与图像处理的概念 1.2 数字图像处理研究的内容 1.2.1 传统的图像处理技术 1.2.2 智能图像处理技术 1.3 数字图像处理系统 1.4 数字图像处理的应用 1.5 人的视觉系统与色度学基础 1.5.1 人的视觉系统 1.5.2 色度学基础 1.6 本书的安排 本章参考文献第2章 图像采集 2.1 图像数字化 2.1.1 图像的数学模型 2.1.2 采样与量化 2.2 量化技术 2.2.1 标量量化 2.2.2 矢量量化 2.2.3 LBG算法与初始码书设计 2.3 图像输入 2.3.1 图像采集系统 2.3.2 图像输入设备 2.4 图像文件格式 2.4.1 BMP(位图)文件格式 2.4.2 GIF文件格式 2.4.3 JPEG文件格式 本章参考文献 第3章 图像变换 3.1 傅里叶变换 3.1.1 一维傅里叶变换 3.1.2 二维傅里叶变换 3.1.3 二维离散傅里叶变换的性质 3.1.4 正交变换的基本概念 3.2 离散余弦变换 3.2.1 离散余弦变换的定义 3.2.2 离散余弦变换的快速实现 3.3 K-L变换 3.3.1 K-L变换的定义 3.3.2 K-L变换的性质 3.4 小波变换 3.4.1 连续小波变换 3.4.2 二进小波变换 3.4.3 离散小波变换 3.5 其他可分离变换 3.5.1 沃尔什变换 3.5.2 哈达玛变换 3.5.3 斜变换 本章参考文献 第4章 图像增强 4.1 空间域单点增强 4.1.1 灰度变换 4.1.2 直方图修正 4.2 图像平滑 4.2.1 噪声门限法 4.2.2 邻域平均法 4.2.3 加权平均法 4.2.4 值滤波 4.2.5 掩膜平滑法 4.2.6 空间低通滤波 4.3 图像锐化 4.3.1 微分算子方法 4.3.2 Sobel算子 4.3.3 拉普拉斯算子 4.3.4 统计差值法 4.3.5 掩膜匹配法 4.3.6 空间高通滤波 4.4 图像滤波 4.4.1 低通滤波 4.4.2 同态滤波 4.4.3 高通滤波 4.5 彩色增强 4.5.1 假彩色处理 4.5.2 伪彩色处理 本章参考文献 第5章 图像恢复 5.1 图像退化的数学模型 5.1.1 图像退化模型 5.1.2 点冲激函数的退化模型 5.1.3 连续图像退化模型 5.1.4 离散图像的退化模型 5.1.5 离散退化模型的求解 5.2 无约束图像恢复 5.2.1 最小二乘估计 5.2.2 运动模糊图像的恢复 5.3 有约束图像恢复 5.3.1 有约束的最小二乘图像恢复 5.3.2 维纳滤波 5.3.3 功率谱均衡恢复 5.3.4 有约束最小平方恢复 5.4 图像几何校正 5.4.1 几何校正方法 5.4.2 空间几何坐标变换 5.4.3 重采样 本章参考文献 第6章 图像编码与压缩 6.1 图像编码基础 6.1.1 数据压缩的概念 6.1.2 图像压缩的性能评价 6.2 统计编码 6.2.1 编码效率与冗余度 6.2.2 霍夫曼编码 6.2.3 香农-费诺编码 6.2.4 算术编码 6.3 预测编码 6.3.1 预测编码的基本原理 6.3.2 差值脉冲编码调制 6.3.3 最优线性预测 6.4 变换编码 6.4.1 变换编码系统结构 6.4.2 正交变换编码 6.4.3 小波变换编码简介 6.5 无失真压缩编码 6.5.1 引言 6.5.2 基于线性预测的无失真压缩 6.5.3 基于S+P变换的无失真压缩 6.5.4 基于第二代小波变换的无失真压缩 6.6 国际标准简介 6.6.1 JPEG 6.6.2 H.261建议 6.6.3 MPEG-1标准 6.6.4 MPEG-2标准 6.6.5 MPEG-4标准 6.6.6 MPEG-7标准 6.6.7 MPEG-21标准 本章参考文献 第7章 图像边缘检测 7.1 边缘检测的基本概念 7.2 微分边缘检测算子 7.2.1 梯度方法 7.2.2 二阶微分算子 7.3 多尺度边缘检测 7.3.1 Marr-Hildretch边缘检测 7.3.2 Witkin尺度滤波理论 7.3.3 小波变换边缘检测 7.4 基于模糊增强的边缘检测 7.4.1 引言 7.4.2 单层次模糊增强简介 7.4.3 多层次模糊增强 7.4.4 基于多层次模糊增强的边缘提取 7.5 基于Snake模型的边缘检测 7.5.1 Snake模型的数学描述 7.5.2 基于Snake模型的边缘检测 7.6 曲面拟合边缘检测 本章参考文献 第8章 图像分割 8.1 图像分割的一般模型 8.2 基于阈值选取的图像分割方法 8.2.1 直方图阈值 8.2.2 最大熵阈值 8.2.3 二维直方图阈值 8.2.4 统计判决确定门限 8.2.5 局部阈值法 8.3 基于区域的图像分割方法 8.3.1 区域生长法 8.3.2 分裂-合并 8.4 基于边缘检测的图像分割 8.4.1 Hough变换原理 8.4.2 Hough变换应用 8.4.3 广义Hough变换 8.5 模糊分割技术 8.5.1 模糊阈值分割方法 8.5.2 基于二维直方图的模糊门限分割方法 本章参考文献 第9章 图像特征分析 9.1 颜色特征分析 9.1.1 颜色的表示 9.1.2 颜色直方图 9.1.3 直方图不变特征量 9.1.4 颜色矩 9.2 纹理特征分析 9.2.1 空间自相关法 9.2.2 傅里叶功率谱法 9.2.3 共生矩阵法 9.2.4 基于邻域特征统计的纹理分析方法 9.2.5 灰度差分统计方法与行程长度统计法 9.2.6 用分数维描述纹理 9.2.7 Tamura纹理特征 9.3 形状特征分析 9.3.1 引言 9.3.2 基于轮廓的全局方法 9.3.3 基于轮廓的结构方法 9.3.4 基于区域的全局方法 9.3.5 基于区域的结构方法 本章参考文献 第10章 图像配准 10.1 图像配准基础 10.1.1 图像配准的概念 10.1.2 图像配准的一般模型 10.1.3 相似性测度 10.2 基于图像灰度的图像配准 10.2.1 互相关匹配方法 10.2.2 投影匹配算法 10.2.3 基于傅里叶变换的相位匹配方法 10.2.4 图像矩匹配方法 10.3 基于图像特征的配准 10.3.1 算法步骤与特点 910.3.2 图像预处理 10.3.3 特征选择 10.3.4 图像匹配 10.4 最小二乘图像匹配方法 10.4.1 基本思想 10.4.2 基本算法 10.5 快速匹配方法 10.5.1 分层搜索算法 10.5.2 基于遗传算法的匹配方法 10.5.3 基于金字塔分级搜索的匹配方法 本章参考文献 第11章 图像融合 11.1 图像融合的基本原理 11.1.1 信息融合的概念 11.1.2 多源遥感图像融合 11.1.3 图像融合的模型框架与算法 11.1.4 遥感图像融合效果的评价 11.2 小波变换融合法 11.2.1 传统的小波变换融合方法 11.2.2 基于特征的小波变换融合方法 11.3 基于PCA变换与小波变换的图像融合 11.3.1 PCA(主分量分析)变换融合法 11.3.2 基于PCA变换与小波变换的融合算法 11.4 基于IHS变换与小波变换的图像融合 11.4.1 IHS变换融合法 11.4.2 基于IHS变换与小波变换的融合算法 本章参考文献 第12章 图像分类 12.1 图像分类的概念与原理 12.1.1 图像分类的概念 12.1.2 图像分类的原理 12.2 统计分类方法 12.2.1 监督分类 12.2.2 非监督分类 12.3 模糊分类方法 12.3.1 模糊集合 12.3.2 模糊关系 12.3.3 模糊分类 12.3.4 基于模糊关系的模式分类 12.3.5 模糊聚类方法 12.3.6 改进的模糊C-均值算法 12.4 神经网络分类方法 12.4.1 人工神经网络基础 12.4.2 神经网络监督分类方法 12.4.3 神经网络非监督分类方法 12.5 基于广义图像的神经网络遥感图像分类方法 12.5.1 广义图像 12.5.2 算法的实现过程 12.5.3 实验结果与性能比较 12.6 基于证据理论与神经网络的遥感图像分类方法 12.6.1 证据理论 12.6.2 算法的实现过程 12.6.3 实验结果与性能比较 本章参考文献 第13章 图像识别 13.1 图像识别的基本原理 13.2 模板匹配识别技术 13.2.1 模板匹配一般模型 13.2.2 序贯相似性检测算法 13.3 神经网络图像识别技术 13.3.1 神经网络识别的一般模型 13.3.2 BP神经网络识别技术 13.3.3 Kohonen神经网络识别技术 13.4 模糊识别技术 13.4.1 隶属原则识别法 13.4.2 择近原则识别法 13.4.3 一种手写文字模糊识别技术 13.5 基于隐马尔可夫模型的识别技术 13.5.1 隐马尔可夫模型基础 13.5.2 基于隐马尔可夫模型的人脸识别 13.6 车牌识别技术 13.6.1 系统简介 13.6.2 车牌图像定位分割算法 13.6.3 车牌字符的识别 本章参考文献 第14章 c基于内容的图像检索 14.1 基于内容的图像检索概述 14.1.1 基于内容的检索 14.1.2 基于内容的图像检索 14.1.3 基于内容的图像检索相关技术 14.1.4 基于内容的图像检索系统 14.2 基于颜色特征的图像检索 14.2.1 直方图方法 14.2.2 心矩法 14.2.3 参考颜色表法 14.2.4 颜色对方法 14.2.5 基于主色调的检索方法 14.2.6 结合空间信息的图像检索方法 14.3 基于纹理特征的图像检索 14.3.1 基于共生矩阵的纹理匹配 14.3.2 基于小波变换的纹理匹配 14.3.3 基于Gabor变换的纹理匹配 14.4 基于形状特征的图像检索 14.4.1 基于傅里叶描述的形状检索 14.4.2 基于形状矩的形状检索 本章参考文献 第15章 图像数字水印技术 15.1 图像数字水印技术概述 15.1.1 信息隐藏技术 15.1.2 数字水印技术 15.2 空域水印技术 15.3 DCT域图像水印技术 15.3.1 DCT域图像水印研究综述 15.3.2 算法实例 5.3.3 水印的稳健性测试 15.4 小波域图像水印技术 15.4.1 技术流程 15.4.2 基于低频子带方法 15.4.3 细节分量方法 15.4.4 利用图像编码的方法 15.4.5 Inoue算法 15.5 脆弱图像数字水印技术 15.5.1 脆弱图像数字水印的基本特征和研究状况 15.5.2 算法实例 本章参考文献
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信 %% 开发者:Matlab科研助手 %% 更多咨询关注天天Matlab微信公众号 ### 团队长期从事下列领域算法的研究和改进: ### 1 智能优化算法及应用 **1.1 改进智能优化算法方面(单目标和多目标)** **1.2 生产调度方面** 1.2.1 装配线调度研究 1.2.2 车间调度研究 1.2.3 生产线平衡研究 1.2.4 水库梯度调度研究 **1.3 路径规划方面** 1.3.1 旅行商问题研究(TSP、TSPTW) 1.3.2 各类车辆路径规划问题研究(vrp、VRPTW、CVRP) 1.3.3 机器人路径规划问题研究 1.3.4 无人机三维路径规划问题研究 1.3.5 多式联运问题研究 1.3.6 无人机结合车辆路径配送 **1.4 三维装箱求解** **1.5 物流选址研究** 1.5.1 背包问题 1.5.2 物流选址 1.5.4 货位优化 ##### 1.6 电力系统优化研究 1.6.1 微电网优化 1.6.2 配电网系统优化 1.6.3 配电网重构 1.6.4 有序充电 1.6.5 储能双层优化调度 1.6.6 储能优化配置 ### 2 神经网络回归预测、时序预测、分类清单 **2.1 bp预测和分类** **2.2 lssvm预测和分类** **2.3 svm预测和分类** **2.4 cnn预测和分类** ##### 2.5 ELM预测和分类 ##### 2.6 KELM预测和分类 **2.7 ELMAN预测和分类** ##### 2.8 LSTM预测和分类 **2.9 RBF预测和分类** ##### 2.10 DBN预测和分类 ##### 2.11 FNN预测 ##### 2.12 DELM预测和分类 ##### 2.13 BIlstm预测和分类 ##### 2.14 宽度学习预测和分类 ##### 2.15 模糊小波神经网络预测和分类 ##### 2.16 GRU预测和分类 ### 3 图像处理算法 **3.1 图像识别** 3.1.1 车牌、交通标志识别(新能源、国内外、复杂环境下车牌) 3.1.2 发票、身份证、银行卡识别 3.1.3 人脸类别和表情识别 3.1.4 打靶识别 3.1.5 字符识别(字母、数字、手写体、汉字、验证码) 3.1.6 病灶识别 3.1.7 花朵、药材、水果蔬菜识别 3.1.8 指纹、手势、虹膜识别 3.1.9 路面状态和裂缝识别 3.1.10 行为识别 3.1.11 万用表和表盘识别 3.1.12 人民币识别 3.1.13 答题卡识别 **3.2 图像分割** **3.3 图像检测** 3.3.1 显著性检测 3.3.2 缺陷检测 3.3.3 疲劳检测 3.3.4 病害检测 3.3.5 火灾检测 3.3.6 行人检测 3.3.7 水果分级 **3.4 图像隐藏** **3.5 图像去噪** **3.6 图像融合** **3.7 图像配准** **3.8 图像增强** **3.9 图像压缩** ##### 3.10 图像重建 ### 4 信号处理算法 **4.1 信号识别** **4.2 信号检测** **4.3 信号嵌入和提取** **4.4 信号去噪** ##### 4.5 故障诊断 ##### 4.6 脑电信号 ##### 4.7 心电信号 ##### 4.8 肌电信号 ### 5 元胞自动机仿真 **5.1 模拟交通流** **5.2 模拟人群疏散** **5.3 模拟病毒扩散** **5.4 模拟晶体生长** ### 6 无线传感器网络 ##### 6.1 无线传感器定位 ##### 6.2 无线传感器覆盖优化 ##### 6.3 室内定位 ##### 6.4 无线传感器通信及优化 ##### 6.5 无人机通信继优化 #####

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值