В этом примере показано, как восстановить размытое изображение путем решения масштабной задачи оптимизации линейных наименьших квадратов с ограничением по границам. В примере используется проблемный подход. Подход на основе решателя см. в разделе Масштабные линейные наименьшие квадраты с ограничениями, основанные на решателе.
Вот фото сидящих в машине людей, имеющих интересный номерной знак.
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'])

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

Изображение гораздо менее отчётливо; вы больше не можете читать номерной знак.
Для устранения размытия предположим, что вы знаете оператора размытия 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')
Размытое изображение намного четче размытого изображения. Вы можете еще раз прочитать номерной знак. Однако размытое изображение имеет некоторые артефакты, такие как горизонтальные полосы в нижней правой области дорожного покрытия. Возможно, эти артефакты могут быть удалены регуляризацией.
Регуляризация - это способ сгладить решение. Существует множество методов регуляризации. Для простого подхода добавьте термин к целевой функции следующим образом:
x-G‖2) 0≤x≤1.
делает результирующую квадратичную проблему более стабильной. Возьмите в качестве значения 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')
Судя по всему, эта простая регуляризация не удаляет артефакты.