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

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

Проблема

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

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.

Проблема состоит в том, чтобы взять размытую версию этой фотографии и попробовать к deblur его. Стартовое изображение является черным и белым, означая, что оно состоит из пиксельных значений от 0 до 1 в m x n матрица 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));

Нарисуйте изображение 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) <= 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.

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

Изображение Deblurred

К deblur предположите, что вы знаете размывающийся оператор D. Как хорошо можно удалить размытость и восстановить оригинальное изображение P?

Самый простой подход должен решить задачу наименьших квадратов для x:

min(Dx-G2) при ограничениях 0x1.

Эта проблема берет размывающуюся матрицу D, как дали и пытается найти x, который делает Дуплекс самым близким к 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.

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

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

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

min((D+εI)x-G2) при ограничениях 0x1.

ТерминεI делает получившуюся квадратичную проблему более устойчивой. Взять ε=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.

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте