2013 Estudiantes universitarios Modelado matemático Pregunta B Programación
Pregunta B de la Competencia Nacional de Modelado Matemático para Estudiantes Universitarios de la Copa de la Sociedad de Educación Superior 2013
Puntos de revisión [Nota] Estos puntos son solo como referencia. El equipo de revisión en cada área de competencia debe basarse. su comprensión del tema en Responder y revisar de forma independiente.
Esta pregunta requiere extraer características apropiadas de los datos y establecer un modelo razonable y eficaz de empalme y restauración de fragmentos de papel. Las características que se pueden considerar incluyen la coincidencia de vectores grises adyacentes, la suma de niveles de gris por fila o columna, el interlineado, etc. Con respecto al modelo de algoritmo, debe haber un proceso de algoritmo específico (como diagrama de flujo, descripción del algoritmo, pseudocódigo, etc.) y principios de diseño. Aunque el resultado de restauración correcto es único, la calidad de la respuesta de un estudiante no puede evaluarse únicamente en función del efecto de restauración proporcionado por el estudiante, sino que debe basarse en el modelo matemático, el método de solución y los resultados del cálculo (como la tasa de restauración). de juicio. Por otro lado, en la evaluación también se debe considerar la cantidad de intervención manual y la razonabilidad de los tiempos de intervención. Problema 1. Problema de restauración de texto cortado sólo verticalmente. Debido al "corte sólo vertical", el papel triturado es más grande, por lo que las características de la información son más obvias. Un método de modelado relativamente intuitivo consiste en definir la distancia (asimétrica) entre dos fragmentos de acuerdo con ciertas características y establecer un modelo de optimización utilizando la idea de la ruta óptima de Hamilton o el ciclo óptimo de Hamilton (TSP). Hay muchas formas de resolver TSP. Los estudiantes deben prestar atención a características como matrices de distancias asimétricas o gráficas dirigidas durante el proceso de solución. También puede haber varios modelos y algoritmos de optimización, siempre que el modelo sea razonable y el efecto de recuperación sea bueno, se debe reconocer. Este problema es relativamente simple, el proceso de recuperación no requiere intervención manual y la tasa de recuperación puede acercarse o llegar a 100. Pregunta 2. El problema de restaurar texto cortado horizontal y verticalmente. Un método de modelado más intuitivo es utilizar primero las características de información de línea del archivo de texto para establecer un modelo de agrupación de los mismos fragmentos de línea. Después de obtener los resultados de la agrupación de filas, utilice un método similar al de la pregunta 1 para completar la clasificación de los fragmentos de cada fila. Finalmente, ordene las filas ordenadas verticalmente. También existen varias soluciones a este problema, y los modelos y métodos deben calificarse en función de su racionalidad, innovación y eficacia. Por ejemplo, considerando un gráfico de distancias de cuatro vecinos, también es una idea más natural que los fragmentos crezcan gradualmente. Pregunta 3. Restauración de los textos anverso y reverso. Esta pregunta es una continuación de la Pregunta 2. La solución básica es la misma que la de la Pregunta 2. Pero la diferencia es que es necesario aprovechar al máximo la información característica del texto a doble cara. Si la información de esta función se utiliza bien, se puede mejorar la tasa de recuperación. Durante el proceso de calificación, se pueden considerar las extensiones de las preguntas de los estudiantes. Por ejemplo, durante la inspección del modelo, si los estudiantes pueden construir fragmentos por sí mismos para probar y evaluar el efecto de restauración del modelo de restauración empalmado propuesto por el equipo, se pueden considerar los puntos de bonificación apropiados. Debe haber procedimientos al calificar trabajos, y los resultados de los procedimientos deben ser consistentes con los resultados dados en el trabajo.
borrar libera espacio
clc limpia la pantalla
lee datos de imagen
left_col = [];
right_col = [];
para fp = 0: 208
str = int2str(fp)
si fp lt; nombre = ['0' '0' str '.bmp'];
elseif fp gt; = 10 amp fp lt; .bmp'];
else
nombre = [str '.bmp'];
fin
a = imread( nombre );
[m, n] = tamaño(a);
col_izquierda = [col_izquierda a(:, 1)]; a(:, n)];
end
Lectura completada
left_col = double(left_col conversión de tipo
right_col =); double(right_col);
Encuentra todas las columnas donde los píxeles más a la izquierda (left_col) del papel son 255 (en blanco)
fila = 1;
para bi=1:209;
número=longitud(find(left_col(:,bi)==255));
si número == 180
S(fila, 1)=bi; guarda los píxeles vacíos en la primera columna (valor gris: 255) en la primera columna de la matriz S
fila = fila 1;
fin
fin
S = [S(:, 1) ceros(fila-1, 18)]; inicialización de matriz
O = [unos(fila- 1, 19)]; Inicializar una matriz de identidad
signo = 1;
w = 0
para r=1: fila-1; /p>
para p=1:18; columna p 1
num = 10000000000; hacer num lo suficientemente grande
para j=1:209;
recuento = 0;
recuento = longitud(find(S==j)); eliminar duplicados
si recuento ~= 0
continuar;
else
Blank = length(find(right_col(:,S(r,p)) == 255)); Si el borde derecho del papel triturado es 255 (es decir, en blanco), luego salte y termine el empalme después de esta línea
si está en blanco == 180
sign = 0;
break; salta de este bucle e ingresa al bucle p
else
ri=right_col(:, S(r, p) ); calcular la precisión del empalme izquierdo y derecho
le=left_col(:,j);
c=ri-le;
c = c.^2 ;
error=sum(c(:));
end
if num gt = error Encuentra la diferencia más pequeña con la mayor precisión
núm = error
w = j
fin
fin
fin
if sign == 0
sign = 1
break; salta del bucle p e ingresa al bucle r
else
S(r, p 1)=w; la matriz bidimensional almacena la posición de empalme de cada trozo de papel
end
end
end p>
S = S - O; Clasificación de datos, las imágenes comienzan desde 000.bmp, los subíndices de matriz comienzan desde 1
///////////////// /////// //////////////////////////////////////////// ///////////
El código de clasificación de las características de la tercera pregunta:
borrar libera espacio
clc limpia la pantalla
lectura de datos de imagen
p>
char namea = (209, 7);
char nameb = (209, 7); >
para fpa = 0: 208
str = int2str(fpa);
si fpa lt;
fpa = fpa 1; p>
namea(fpa,:) = ['0' ' 0' str 'a.bmp'];
elseif fpa gt; = 10 amperios lt;
fpa = fpa 1;
nombrea( fpa,:) = ['0' str 'a.bmp'];
else
fpa = fpa 1;
nombrea(fpa,:) = [str 'a.bmp'];
fin
fin
para afp = 1:209
a= imr
ead(namea(afp,:));
fdataa(:,:,afp) = a;
end
Leer los datos del reverso b
para fpb = 0: 208
str = int2str(fpb);
si fpb lt;p>
fpb = fpb; 1;
nombreb(fpb,:) = ['0' '0' str 'b.bmp'];
elseif fpb gt;
p>fpb = fpb 1;
nombreb(fpb,:) = ['0' str 'b.bmp']
else; p>
fpb = fpb 1;
nombreb(fpb,:) = [str 'b.bmp']
fin
fin<; /p>
para bfp = 1:209
b= imread(nombreb(bfp,:));
fdatab(:,:,bfp) = b;
fin
Lectura completa
qfdataa = ~fdataa; negar
qfdatab = ~fdatab<; /p>
p>
para lj = 1: suma acumulada de 209 filas
Ldataa(:,lj) = sum(qfdataa(:,:,lj),2); a) suma acumulativa
Ldatab(:,lj) = sum(qfdatab(:,:,lj),2); (b) suma acumulativa
end
;Ldataa(Ldataagt; 0)=1; Normalización positiva
Ldatab(Ldatabgt; 0)=1; Normalización negativa
Clasificación de datos horizontal Positiva (a) clasificación
para flta = 1:209;
para pflta = 1:209
numa = 0;
para flha = 1:180;
if Ldataa(flha, flta) == Ldataa(flha, pflta)
numa = numa 1;
fin
p>end
tsavea(flta, pflta) = numa Guarda el grado coincidente entre cada dos imágenes
end
end
Clasificación de datos horizontal inversa (b) clasificación
para fltb = 1:209;
para pfltb = 1:209
entumecido = 0; /p>
para flhb = 1:180
si Ldatab(flhb, fltb) =
= Ldatab(flhb, pfltb)
entumecido = entumecido 1;
fin
fin
tsaveb(fltb, pfltb) = entumecido Guarde el grado de coincidencia entre cada dos imágenes
end
end
Grado de coincidencia total
tsave; = (tsavea tsaveb)/2;
Encuentra todas las columnas cuyos píxeles más a la izquierda (left_col) sean 255 (en blanco)
fdataa = double(fdataa) ;
fdatab = double(fdatab);
fila = 1;
para bi=1:209;
número=longitud (find(fdataa(:,1,bi)~=0 amp; fdatab(:,72,bi)~=0));
if número == 180
S (fila, 1)=bi guarda los píxeles vacíos en la primera columna (valor gris: 255) en la primera columna de la matriz S
fila = fila 1;
end<; /p>
fin
S = [S(:, 1) ceros(fila-1, 18)]; inicialización de matriz
O = [unos(fila-1) , 19)]; Inicializar una matriz de identidad