Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Los mínimos cuadrados lineales restringidos de gran escala, basados en Solver

En este ejemplo se muestra cómo recuperar una imagen borrosa resolviendo un problema de optimización lineal de mínimos cuadrados con restricciones enlazadas a gran escala. En el ejemplo se utiliza el enfoque basado en Solver. Para el enfoque basado en problemas, vea.Los mínimos cuadrados lineales restringidos de gran escala, basados en problemas

El problema

Aquí hay una foto de la gente sentada en un coche que tiene una matrícula interesante.

load optdeblur [m,n] = size(P); mn = m*n; imshow(P) title(sprintf('Original Image, size %d-by-%d, %d pixels',m,n,mn))

El problema es tomar una versión borrosa de esta foto y tratar de enfoque vibración. La imagen inicial es en blanco y negro, lo que significa que consta de valores de píxel de 0 a 1 en la matriz P m x n.

Añadir movimiento

Simular el efecto de desenfoque de movimiento vertical promediando cada píxel con los 5 píxeles por encima y por debajo. Construya una matriz dispersa para difuminar con una sola matriz multiplicándose.D

blur = 5;  mindex = 1:mn;  nindex = 1:mn; for i = 1:blur   mindex=[mindex i+1:mn 1:mn-i];   nindex=[nindex 1:mn-i i+1:mn]; end D = sparse(mindex,nindex,1/(2*blur+1));

Dibuje una imagen de D.

cla axis off ij xs = 31; ys = 15; xlim([0,xs+1]); ylim([0,ys+1]); [ix,iy] = meshgrid(1:(xs-1),1:(ys-1)); l = abs(ix-iy)<=5; text(ix(l),iy(l),'x') text(ix(~l),iy(~l),'0') text(xs*ones(ys,1),1:ys,'...'); text(1:xs,ys*ones(xs,1),'...'); title('Blurring Operator D (x = 1/11)')

Multiplique la imagen P por la matriz D para crear una imagen borrosa G.

G = D*(P(:)); figure imshow(reshape(G,m,n)); title('Blurred Image')

La imagen es mucho menos distinta; ya no puede leer la matrícula.

Imagen desborrosa

Para Deblur, suponga que conoce el operador de desenfoque D. ¿Qué tan bien se puede eliminar el desenfoque y recuperar la imagen original P?

El enfoque más simple es resolver un problema de mínimos cuadrados para:x

<math display="block">
<mrow>
<mrow>
<mi mathvariant="normal">min</mi>
</mrow>
<mo stretchy="false">(</mo>
<mo stretchy="false"></mo>
<mi>D</mi>
<mi>x</mi>
<mo>-</mo>
<mi>G</mi>
<msup>
<mrow>
<mo stretchy="false"></mo>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
</math>
sujetas a
<math display="block">
<mrow>
<mn>0</mn>
<mo></mo>
<mi>x</mi>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
.

Este problema toma la matriz de desenfoque como se da, e intenta encontrar el que hace más cercano a =.DxDxGDP Para que la solución represente valores de píxel razonables, restrinja la solución de 0 a 1.

lb = zeros(mn,1); ub = 1 + lb; sol = lsqlin(D,G,[],[],[],[],lb,ub);
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
xpic = reshape(sol,m,n); figure imshow(xpic) title('Deblurred Image')

La imagen desborrosa es mucho más clara que la imagen borrosa. Puede volver a leer la matrícula. Sin embargo, la imagen desborrosa tiene algunos artefactos, como las bandas horizontales en la región de pavimento inferior derecha. Tal vez estos artefactos pueden eliminarse mediante una regularización.

Regularización

La regularización es una manera de suavizar la solución. Hay muchos métodos de regularización. Para un enfoque sencillo, agregue un término a la función objetivo de la siguiente manera:

<math display="block">
<mrow>
<mrow>
<mi mathvariant="normal">min</mi>
</mrow>
<mo stretchy="false">(</mo>
<mo stretchy="false"></mo>
<mo stretchy="false">(</mo>
<mi>D</mi>
<mo>+</mo>
<mi>ε</mi>
<mi>I</mi>
<mo stretchy="false">)</mo>
<mi>x</mi>
<mo>-</mo>
<mi>G</mi>
<msup>
<mrow>
<mo stretchy="false"></mo>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mrow>
</math>
sujetas a
<math display="block">
<mrow>
<mn>0</mn>
<mo></mo>
<mi>x</mi>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
.

El término

<math display="block">
<mrow>
<mi>ε</mi>
<mi>I</mi>
</mrow>
</math>
hace que el problema cuadrático resultante sea más estable. Tomar
<math display="block">
<mrow>
<mi>ε</mi>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
<mn>0</mn>
<mn>2</mn>
</mrow>
</math>
y resolver el problema de nuevo.

addI = speye(mn); sol2 = lsqlin(D+0.02*addI,G,[],[],[],[],lb,ub);
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
xpic2 = reshape(sol2,m,n); figure imshow(xpic2) title('Deblurred Regularized Image')

Aparentemente, esta simple regularización no elimina los artefactos.

Temas relacionados