Estadísticas de valores de píxel en la región de interés de ROI, encuentre la desviación mínima, máxima, media y estándar (desviación estándar) de los valores de píxel en la región de interés de ROI


Estadísticas de valores de píxel en la región de interés de ROI, encuentre la desviación mínima, máxima, media y estándar (desviación estándar) de los valores de píxel en la región de interés de ROI

1. Encuentre los valores mínimo y máximo de los valores de píxel en la región de interés de ROI

  • En OpenCV, la función minMaxLoc()se usa para encontrar los valores máximos y mínimos en la matriz y dar sus coordenadas;
  • La función no es adecuada para matrices multicanal. Si necesita recorrer todos los canales para encontrar los valores máximo y mínimo, primero use la función Mat::reshape()para convertir la matriz en una matriz de un solo canal, o use split(), mixChannels(), para extraer un canal específico , y luego use minMaxLoc()la función para encontrar el valor máximo de la matriz y min;

Prototipo de la función minMaxLoc():

(1) Prototipo 1:
void cv::minMaxLoc( 	InputArray src,
			double     *minVal,
			double     *maxVal = 0,
			Point      *minLoc = 0,
			Point      *maxLoc = 0,
			InputArray mask = noArray() 
)

参数解释:
src:输入单通道矩阵
minVal:输入矩阵中的最小值(如果不需要返回,置为NULL)
maxVal:输入矩阵中的最大值(如果不需要返回,置为NULL)
minLoc:输入矩阵中的最小值的坐标(如果不需要返回,置为NULL)
maxLoc:输入矩阵中的最大值的坐标(如果不需要返回,置为NULL)
mask:可选参数,操作掩摸,用以标记求取哪些区域
(2) Prototipo 2:
void minMaxLoc( const SparseMat &src, 
                double 		*minVal,
                double 		*maxVal, 
                int 		*minIdx = 0, 
                int 		*maxIdx = 0
);

参数解释:
src:输入单通道矩阵
minVal:输入矩阵中的最小值(如果不需要返回,置为NULL)
maxVal:输入矩阵中的最大值(如果不需要返回,置为NULL)
minLoc:输入矩阵中的最小值的坐标(如果不需要返回,置为NULL)
maxLoc:输入矩阵中的最大值的坐标(如果不需要返回,置为NULL
(3) Además minMaxLoc(), la función con el mismo uso que la función prototipo 1 minMaxIdx()también puede encontrar los valores máximos y mínimos en la matriz:
Prototipo de la función minMaxIdx():
void minMaxIdx(	InputArray src,
		double	   *minVal,
		double     *maxVal = 0,
		int        *minIdx = 0,
		int        *maxIdx = 0,
		InputArray mask = noArray()
);

参数解释:
src:输入单通道矩阵
minVal:输入矩阵中的最小值(如果不需要返回,置为NULL)
maxVal:输入矩阵中的最大值(如果不需要返回,置为NULL)
minIdx:输入矩阵中的最小值的坐标(如果不需要返回,置为NULL)
maxIdx:输入矩阵中的最大值的坐标(如果不需要返回,置为NULL)
mask:可选参数,操作掩摸,用以标记求取哪些区域

2. Encuentre la media y la desviación estándar (desviación estándar) de los valores de píxel en la región de interés de ROI

(1) Conceptos matemáticos:

  • Media media: el valor medio del conjunto de muestras;

Por favor agregue una descripción de la imagen

  • Varianza varianza: En la teoría de la probabilidad, la varianza se usa para medir el grado de desviación entre una variable aleatoria y su expectativa matemática (es decir, la media) ; en estadística, la varianza (varianza muestral) es el promedio de la suma de los cuadrados de las diferencias entre cada dato muestral y la media muestral ;

Por favor agregue una descripción de la imagen

  • Desviación estándar desviación estándar: refleja el grado de dispersión de un conjunto de datos, la desviación estándar es la raíz cuadrada aritmética de la varianza de la muestra ;

inserte la descripción de la imagen aquí

(2) prototipo de función meanStdDev():

La desviación estándar en opencv indica el grado de cambio en la luz y la sombra de una imagen. Cuanto mayor sea la desviación estándar, más evidente será el cambio en la luz y la sombra;

void meanStdDev( InputArray src,
		 OutputArray mean,
		 OutputArray stddev,
                 InputArray mask=noArray()
);

参数解释:
src:输入矩阵,单通道的矩阵/多通道的矩阵;
mean:输出参数,计算出的平均值;
stddev:输出参数,计算出的标准差;
mask:可选参数,操作掩摸,用以标记求取哪些区域;
Ejemplo:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
    
    
	// 读取图像,BGR存储在Mat矩阵里
	Mat src = cv::imread("C:\\cpp\\image\\suzy4.jpg");
	if (src.empty()) {
    
    
		printf("could not load image..../n");
		return -1;
	}
	namedWindow("src", WINDOW_NORMAL);
	imshow("src", src);

	// 将矩阵转换为单通道矩阵
	vector<Mat> mv;
	split(src, mv);
	double minv, maxv;
	Point minLoc, maxLoc;
	// 使用函数 minMaxLoc()找出矩阵中的最大值和最小值
	for (int i = 0; i < mv.size(); i++)
	{
    
    
		minMaxLoc(mv[i], &minv, &maxv, &minLoc, &maxLoc, Mat());
		cout << "channels:" << i << " min:" << minv << " max:" << maxv << endl;
	}
	// 求roi感兴趣区域内像素值的均值、标准差(标准方差)
	Mat mean, stddev;
	meanStdDev(src, mean, stddev);
	cout << "means:" << mean << endl;
	cout << "stddev:" << stddev << endl;

	waitKey();
	destroyAllWindows();
	return 0;
}

(3) mean()Encuentre el valor medio de los valores de píxel en la región de interés de ROI a través de la función

Prototipo de la función mean():
mean( InputArray src,
      InputArray mask=noArray()
)

参数解释:
src:输入矩阵;
mask:可选参数,操作掩摸,用以标记求取哪些区域;
Ejemplo de código:
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
    
    

	cv::Mat A1 = (cv::Mat_<uchar>(3, 3) << 1, 2, 3,
		4, 5, 6,
		7, 8, 9);

	cout << "A1中的数据为:\n" << A1 << endl << endl;

	cv::Scalar A1_mean;
	// 通过函数mean()求roi感兴趣区域内像素值的均值 
	A1_mean = mean(A1);

	cout << "通过函数mean计算得到的A1的均值为:" << A1_mean << endl << endl;

	cv::Scalar A1_mean_2, A1_sd;
	meanStdDev(A1, A1_mean_2, A1_sd);

	cout << "通过函数meanStdDev计算得到的A1的均值为:" << A1_mean_2 << endl << endl;
	cout << "通过函数meanStdDev计算得到的A1的标准差为:" << A1_sd << endl << endl;

	return(0);
}

Supongo que te gusta

Origin blog.csdn.net/qq_33867131/article/details/132203761
Recomendado
Clasificación