OpenCV-Lernen grundlegender Bildoperationen (acht): Bild-Upsampling und Downsampling

Bildpyramide

Bei der Bildverarbeitung wird die Bildgröße häufig angepasst. Die häufigsten sind das Vergrößern und Verkleinern. Eine Bildpyramide besteht aus einer Reihe von Bildern, wobei die größte Größe unten und die kleinste Größe oben ist. Es sieht aus wie eine Pyramide.

Gaußsche Pyramide

  • Die Gaußsche Pyramide wird durch Downsampling von unten nach oben erhalten.
  • Nach dem Downsampling wird die Bildgröße von MxN auf M / 2xN / 2 geändert, was bedeutet, dass sogar Zeilen und Spalten des Originalbilds gelöscht werden, um das Bild der oberen Ebene zu erhalten.
  • Der Erzeugungsprozess der Gaußschen Pyramide ist in zwei Schritte unterteilt:
    • Gaußsche Unschärfe auf der aktuellen Ebene
    • Löschen Sie die geraden Zeilen und Spalten der aktuellen Ebene

Unterschiedlicher Gaußscher (HUND)

  • Das Ausgabebild wird erhalten, indem die Ergebnisse eines Bildes nach Gaußscher Unschärfe unter verschiedenen Parametern subtrahiert werden.
  • Der Gaußsche Unterschied ist das inhärente Merkmal des Bildes, das häufig bei der Graustufenbildverbesserung und Eckenerkennung verwendet wird.

Laplace-Pyramide

  • Es besteht aus verschiedenen Gaußschen Schichten.
  • Wird häufig bei der Bildfusion verwendet, um großformatige Bilder aus kleinformatigen Bildern wiederherzustellen

API-Einführung

Upsampling und Downsampling

void pyrUp(InputArray src,//输入图像,即源图像,填Mat类的对象即可
           OutputArraydst,//输出图像,和源图片有一样的尺寸和类型。
           const Size& dstsize=Size(),// 输出图像的大小;有默认值Size(),即默认情况下由Size(src.cols*2,src.rows*2)来进行计算
           int borderType=BORDER_DEFAULT )   //边界模式 默认deaft就好



void pyrDown(InputArray src,//输入图像,即源图像,填Mat类的对象即可
           OutputArraydst,//输出图像,和源图片有一样的尺寸和类型。
           const Size& dstsize=Size(),// 输出图像的大小
           int borderType=BORDER_DEFAULT )   //边界模式 默认deaft就好

Matrixnormalisierung


normalize(src, det, 255, 0, NORM_MINMAX);	
//src输入;dst输出,支持原地运算;alpha:range normalization模式的最小值;beta:range normalization模式的最大值,不用于norm normalization(范数归一化)模式。	
//normType	
//归一化的类型,可以有以下的取值:	
//NORM_MINMAX : 数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。	
//NORM_INF : 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C - 范数(绝对值的最大值)	
//NORM_L1 : 归一化数组的L1 - 范数(绝对值的和)	
//NORM_L2 : 归一化数组的(欧几里德)L2 - 范数

Code und Praxis

#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
	//src = imread("src.jpg");
	Mat src = imread("cat.png");
	if (!src.data)
	{
		cout << "cannot open image" << endl;
		return -1;
	}
	namedWindow("input image", WINDOW_AUTOSIZE);
	imshow("input image", src);

	Mat up_out(src.size(),src.type());
	Mat down_out(src.size(), src.type());

	pyrDown(src, down_out);
	pyrUp(src,up_out);
	imshow("Down", down_out);
	imshow("Up", up_out);


	//高斯不同DOG(different of gaussian)	
        //就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像;
        //高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。
	Mat gray_src, dst2, dst3, dog_Image;	

	cvtColor(src, gray_src, COLOR_BGR2GRAY);	

	GaussianBlur(gray_src, dst2, Size(3, 3), 0, 0);	
	GaussianBlur(dst2, dst3, Size(3, 3), 0, 0);	
	subtract(dst2, dst3, dog_Image);

	//归一化显示	
	normalize(dog_Image, dog_Image, 255, 0, NORM_MINMAX);	
	

	imshow("DOG", dog_Image);
	
	waitKey(0);
	return 0;
}

Bildpyramide

HUND

 

Ich denke du magst

Origin blog.csdn.net/fan1102958151/article/details/107096978
Empfohlen
Rangfolge