В этом примере показано, как восстановить размытое изображение путем решения масштабной задачи оптимизации линейных наименьших квадратов с ограничением по границам. В примере используется подход, основанный на решателе. Подход, основанный на проблемах, см. в разделе Масштабные линейные наименьшие квадраты с ограничениями, основанные на проблемах.
Вот фото сидящих в машине людей, имеющих интересный номерной знак.
load optdeblur [m,n] = size(P); mn = m*n; imshow(P) title(sprintf('Original Image, size %d-by-%d, %d pixels',m,n,mn))

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

Умножьте изображение P на матрицу D для создания размытого изображения G.
G = D*(P(:));
figure
imshow(reshape(G,m,n));
title('Blurred Image')
Изображение гораздо менее отчётливо; вы больше не можете читать номерной знак.
Для устранения размытия предположим, что вы знаете оператора размытия D. Насколько хорошо можно удалить размытие и восстановить исходное изображение P?
Простейший подход заключается в решении задачи наименьших квадратов для x:
Dx-G‖2) при условии 0≤x≤1.
Эта задача принимает размытую матрицу D, как указано, и пытается найти x, который делает Dx наиболее близким к G = DP. Чтобы решение представляло значимые значения пикселей, ограничьте решение от 0 до 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')
Размытое изображение намного четче размытого изображения. Вы можете еще раз прочитать номерной знак. Однако размытое изображение имеет некоторые артефакты, такие как горизонтальные полосы в нижней правой области дорожного покрытия. Возможно, эти артефакты могут быть удалены регуляризацией.
Регуляризация - это способ сгладить решение. Существует множество методов регуляризации. Для простого подхода добавьте термин к целевой функции следующим образом:
x-G‖2) 0≤x≤1.
делает результирующую квадратичную проблему более стабильной. Возьмите в качестве значения 0.02 и решите проблему еще раз.
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')
Судя по всему, эта простая регуляризация не удаляет артефакты.