Colección de citas famosas - Slogan de motivación - 2013 Estudiantes universitarios Modelado matemático Pregunta B Programación

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

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;

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

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