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

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

Проблема

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

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'])

Проблема состоит в том, чтобы взять размытую версию этой фотографии и попробовать к 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));

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

Изображение 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);
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')

Изображение 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);
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')

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

Похожие темы

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