基于问题的大规模约束线性最小二乘
这个例子展示了如何通过求解一个大规模的有界约束线性最小二乘优化问题来恢复模糊图像。该示例使用基于问题的方法。有关基于求解器的方法,请参见大规模约束线性最小二乘,基于求解器.
这个问题
这是一张人们坐在一辆车牌很有趣的车里的照片。
负载optdeblur[m,n] = size(P);Mn = m*n;图imshow (P);colormap(灰色);轴从图像;标题([int2str (m)“x”int2str (n)“(”int2str (mn))像素的])
问题是拍摄这张照片的模糊版本,并尝试去模糊它。开始的图像是黑白的,这意味着它由m x n矩阵P中从0到1的像素值组成。
增加运动
模拟垂直运动模糊的效果,通过平均每个像素与上下5个像素。构造稀疏矩阵D
用一个矩阵相乘来模糊
模糊= 5;Mindex = 1:mn;Nindex = 1:mn;为I = 1:模糊mindex=[mindex I +1:mn 1:mn- I];Nindex =[Nindex 1:mn-i i+1:mn];结束D =稀疏(mindex,nindex,1/(2*blur+1));
画一张D的图。
cla轴从ijXs = 31;Ys = 15;xlim ([0, x + 1]);ylim ([0, y + 1]);[ix,iy] = meshgrid(1:(xs-1),1:(ys-1));L = abs(ix-iy) <=模糊;文本(iy ix (l) (l),“x”)文本(第九(~ l), iy (l ~),' 0 ')文本(x *的(y, 1), 1: y,'...');文本(1:x, y *的(x, 1),'...');标题(模糊算子D (x = 1/11))
将图像P乘以矩阵D,得到一个模糊图像G。
G = d *(p (:));图imshow(重塑(G, m, n));
图像不那么清晰;你再也看不清车牌了。
模糊的图像
为了去模糊,假设你知道模糊算子d,你能去除模糊并恢复原始图像P吗?
最简单的方法是求解最小二乘问题x:
受 .
这个问题需要模糊矩阵D就像给出的那样,并试图找到x这使得Dx最接近G=DP.为了使解表示合理的像素值,将解限制在0到1之间。
X = optimvar(“x”、锰、下界的0,“UpperBound”1);expr = D*x-G;objecc = expr'*expr;Blurprob =优化问题(“目标”, objec);Sol = solve(blurprob);
用quadprog解决问题。最小值满足约束条件。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
Xpic =重塑(sol.x,m,n);图imshow(xpic)标题(“解模糊图像”)
去模糊图像比模糊图像清晰得多。你可以再看一遍车牌。然而,去模糊图像有一些伪影,如右下路面区域的水平带。也许可以通过正则化来移除这些工件。
正则化
正则化是一种平滑解决方案的方法。有许多正则化方法。对于一个简单的方法,在目标函数中添加一个项,如下所示:
受 .
这个词 使得到的二次问题更加稳定。取 再次解决问题。
addI = speye(mn);expr2 = (D + 0.02*addI)*x - G;Objec2 = expr2'*expr2;Blurprob2 =优化问题(“目标”, objec2);Sol2 = solve(blurprob2);
用quadprog解决问题。最小值满足约束条件。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
Xpic2 =重塑(sol2.x,m,n);图imshow(xpic2)标题(“去模糊正则化图像”)
显然,这种简单的正则化并不能移除工件。