Red de conocimiento informático - Material del sitio web - Cómo usar matlab para calcular el número de píxeles en el área blanca de una imagen binaria

Cómo usar matlab para calcular el número de píxeles en el área blanca de una imagen binaria

El principio de cálculo es el siguiente:

Supongamos que el fondo de la imagen binaria es negro, el borde es blanco y el borde blanco no contiene puntos negros, como se muestra en la figura adjunta.

El código fuente del programa es el siguiente:

%% Paso 1

Borrar todas las imágenes

clc

I= imread('test.bmp');%Leer la imagen

bwI=im2bw(I,0.5);%Convertir a imagen binaria

L=bwlabel(bwI, 4); % Marca el área de cuatro líneas

[r,c]=find(L==1 % Encuentra el área blanca en ella, r es un vector compuesto por las filas donde está el blanco); se ubican los puntos, y c es el punto blanco Un vector que consta de la columna en la que se encuentra

% Paso 2% Eliminar números duplicados en r

new_r=[];

para i=1: longitud(r)

nn=find(new_r==r(i));

si está vacío(nn),new_r=[new_r r( i)];end

end

% paso 3

sum_zeros=0;% Número total de puntos de contorno

para i= 1: length(new_r)

n =find(bwI(new_r(i),:)==1);%Encuentra la posición del punto blanco en la línea con el punto blanco

Si longitud(n)==1, continúa; finaliza %Si solo hay un punto blanco en la línea, regresa

num_zeros=n(end)-n(1)+1-longitud (n); de lo contrario, cuente el número de puntos negros intercalados entre los puntos blancos

sum_zeros=sum_zeros+num_zeros;

end

Un ejemplo de binario El gráfico es el siguiente (es decir, un punto negro se intercala entre un punto blanco y un punto negro)

sum_zeros=sum_zeros+num_zeros;

end

Ejemplos de gráficos binarios son los siguientes, por ejemplo, en blanco y negro):

Información ampliada:

Código fuente de implementación del lenguaje C:

#include "opencv2/ ¿highgui/highgui.hpp"?

#include "opencv2/imgproc/imgproc .hpp"?

#include "opencv2/core/core.hpp"

#include

#include

#include "cv.h"

#include "highgui.hpp" ?

#include "highgui.h"

#include

#include

#include

#include < fstream>

usando el espacio de nombres std;

usando el espacio de nombres cv;

// Estadísticas de el porcentaje de píxeles blancos y negros en toda la imagen

int bSums(Mat src)

{ int counter = 0; int black = 0 int n = 0; Iterador para acceder a píxeles Mat_::iterator it = src.begin(); Mat_::iterator itend = src.end(); = fingir; ++yo

t) { n++; if ((*it) > 0) {

counter += 1;// Después de la binarización, el píxel es 0 o 255 } else {

negro + = 1; } } } doble biliB = contador * 1.0 / n * 1.0 * 100 * 1.0; doble biliH = negro * 1.0 / n * 1.0 * 100 * 1.0; ; cout << "negro:" << negro << endl; cout << "n:" << n << endl; cout << "biliB:" <<.biliB << endl; " << biliH << endl; contador de retorno;

}

int main(int agrc, char** agrv)

{ Mat imgPath = imread( "D://XR//811416.jpg");//leer la imagen de origen //namedWindow("imagen original", 0); //resizeWindow("imagen original", 500, 500); image" , imgPath); Mat a1; cvtColor(imgPath, a1, COLOR_BGR2GRAY);//transformar a escala de grises //namedWindow("escala de grises", 0); //resizeWindow("escala de grises", 500, 500); imshow (" escala de grises", a1); Mat a2; umbral(a1, a2, 0, 255, THRESH_BINARY | THRESH_OTSU);//binarización //namedWindow("escala de grises", 0); //resizeWindow("Escala de grises", 500, 500) ; imshow("Escala de grises", a2); int a = bSums(a2);//llamar a la función bSums imshow("A", a2); //cout << "A:" << a; devolver 0;

}