I = estoy leído(" touxiang . jpg ");
I = rgb2gray(I
BW = im2bw(I);
En la figura, imshow(BW)
[n1n2]=size(BW);
R = piso(n 1/10); Diez bloques, ¿vale?
C = Piso (N2/10); dividido en diez bloques, toma el número entero más pequeño más cercano.
x 1 = 1; es 1 del tamaño de la imagen.
yen = 1; y2 = c; inicialización de la columna correspondiente
j = 1:10
if (y2
Loc = encontrado (BW(x1, x2, y1, y2) = = 0 encontrar la posición que satisface la condición en la matriz de búsqueda, [r, c, v] = encontrar (x), donde r y c contienen elementos distintos de cero; filas, la columna v es su valor numérico, x también se puede reemplazar por una expresión lógica.
La ubicación aquí debe ser el número de píxeles negros en la ventana BW, que es el valor de O a continuación. un juicio condicional en if
[o p]=size(loc);
PR = o * 100/s el porcentaje de píxeles negros
If. PR
BW(x1, x2, y1, y2) = 0
r1 = x1, x2 R2 =; >pr 1 = 0;
Fin
im show(BW);
Fin
yen = y 1 salto de columna;
y2 = y2 c; salto de columna
fin
x 1 = x 1 r; salto de fila
x2 = x2 r; Salto de línea
Fin
En la imagen, imshow(BW)
L = bwlabel(BW, 8);; En la imagen de la etiqueta El cuadro delimitador de ocho regiones conectadas
(BB = regionprops(L ', tamaño) característica del área, BoundingBox se refiere al rectángulo más pequeño que rodea cada área y su número es igual al número.
p >La característica de región también contiene la región, es decir, el centro de gravedad del píxel de cada región.
bit = struct 2 cell(BB) La función extrae el valor de cada variable en la estructura. , formando una matriz de celda.
BB2 group = cell2mat(bits); convierte una matriz de celda única en una matriz única.
[s1s2] = tamaño (grupo BB2); La matriz BB almacena las coordenadas diagonales del rectángulo, que son de cuatro bits, la matriz tupla se convierte en una matriz única
MX = 0
Cross = 3:4: Cada cuatro números en s2-1 corresponden a un rectángulo, y todos los subíndices de la matriz en matlab comienzan desde 1.
P = BB2Group(k)*BB2Group(k 1); Ancho*Alto
Si p > mx amp(BB2Group(k)/BB2Group(1,K 1)) < 1.8 Si el área es grande, el ancho/alto es
MX = p;
j = k;
Fin
Fin
Estoy mostrando(i) en la imagen;
holdon
Rectangle("position",[BB2 group(1,j-2)BB2 group(j -1), grupo BB2 (j), grupo BB2 (1 1)], "EdgeColor", "R")