exponenta event banner

Масштабные линейные наименьшие квадраты с ограничениями, основанные на проблемах

В этом примере показано, как восстановить размытое изображение путем решения масштабной задачи оптимизации линейных наименьших квадратов с ограничением по границам. В примере используется проблемный подход. Подход на основе решателя см. в разделе Масштабные линейные наименьшие квадраты с ограничениями, основанные на решателе.

Проблема

Вот фото сидящих в машине людей, имеющих интересный номерной знак.

load optdeblur
[m,n] = size(P);
mn = m*n;
figure
imshow(P);
colormap(gray);
axis off image;
title([int2str(m) ' x ' int2str(n) ' (' int2str(mn) ') pixels'])

Figure contains an axes. The axes with title 149 x 311 (46339) pixels contains an object of type image.

Проблема в том, чтобы сделать размытую версию этой фотографии и попытаться удалить ее. Начальное изображение является черно-белым, что означает, что оно состоит из значений пикселей от 0 до 1 в матрице P.

Добавить движение

Моделирование эффекта размытия вертикального движения путем усреднения каждого пикселя с 5 пикселями выше и ниже. Построение разреженной матрицы 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));

Нарисуйте рисунок Д.

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) <= blur;
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)')

Умножьте изображение P на матрицу D для создания размытого изображения G.

G = D*(P(:));
figure
imshow(reshape(G,m,n));

Figure contains an axes. The axes contains an object of type image.

Изображение гораздо менее отчётливо; вы больше не можете читать номерной знак.

Размытое изображение

Для устранения размытия предположим, что вы знаете оператора размытия D. Насколько хорошо можно удалить размытие и восстановить исходное изображение P?

Простейший подход заключается в решении задачи наименьших квадратов для x:

мин (Dx-G‖2) при условии 0≤x≤1.

Эта задача принимает размытую матрицу D, как указано, и пытается найти x, который делает Dx наиболее близким к G = DP. Чтобы решение представляло значимые значения пикселей, ограничьте решение от 0 до 1.

x = optimvar('x',mn,'LowerBound',0,'UpperBound',1);
expr = D*x-G;
objec = expr'*expr;
blurprob = optimproblem('Objective',objec);
sol = solve(blurprob);
Solving problem using quadprog.

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.x,m,n);
figure
imshow(xpic)
title('Deblurred Image')

Figure contains an axes. The axes with title Deblurred Image contains an object of type image.

Размытое изображение намного четче размытого изображения. Вы можете еще раз прочитать номерной знак. Однако размытое изображение имеет некоторые артефакты, такие как горизонтальные полосы в нижней правой области дорожного покрытия. Возможно, эти артефакты могут быть удалены регуляризацией.

Регуляризация

Регуляризация - это способ сгладить решение. Существует множество методов регуляризации. Для простого подхода добавьте термин к целевой функции следующим образом:

мин ((D + αI) x-G‖2) при условии 0≤x≤1.

Этот термин делает результирующую квадратичную проблему более стабильной. Возьмите в качестве значения start= 0.02 и решите проблему еще раз.

addI = speye(mn);
expr2 = (D + 0.02*addI)*x - G;
objec2 = expr2'*expr2;
blurprob2 = optimproblem('Objective',objec2);
sol2 = solve(blurprob2);
Solving problem using quadprog.

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.x,m,n);
figure
imshow(xpic2)
title('Deblurred Regularized Image')

Figure contains an axes. The axes with title Deblurred Regularized Image contains an object of type image.

Судя по всему, эта простая регуляризация не удаляет артефакты.

Связанные темы