主要内容

大规模约束线性最小二乘法,基于解算器

此示例演示如何通过解决大规模边界约束线性最小二乘优化问题来恢复模糊图像。此示例使用基于解算器的方法。有关基于问题的方法,请参阅基于问题的大规模约束线性最小二乘法.

问题

这是坐在有一个有趣的车牌的汽车中的人照片。

负载optdeblur[m,n]=尺寸(P);mn=m*n;imshow(P)标题(sprintf)('原始图像​​,大小%d-%d,%d pumples',m,n,mn)))

图包含轴。具有标题原始图像的轴,尺寸为149-by-311,46339像素包含类型图像的对象。

问题是拍摄这张照片的模糊版本并尝试去模糊。起始图像是黑白的,这意味着它由m x n矩阵P中从0到1的像素值组成。

添加运动

通过平均每个像素上下5个像素来模拟垂直运动模糊的效果。构造一个稀疏矩阵D使用单个矩阵进行模糊。

模糊=5;mindex=1:mn;nindex=1:mn;对于i=1:blur mindex=[mindex i+1:mn 1:mn-i];nindex=[nindex 1:mn-i+1:mn];结束D=稀疏(mindex,nindex,1/(2*模糊+1));

画一幅D。

cla轴ijxs = 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;文字(ix(l),iy(l),“x”)文本(ix(~l),iy(~l),'0')文本(xs*one(ys,1),1:ys,'...');文字(1:xs,ys * ys(xs,1),'...');标题('模糊运算符D(x=1/11)')

将图像P乘以矩阵D以创建模糊图像G。

G=D*(P(:);图形显示(重塑(G,m,n));标题(“模糊图像”)

图中包含轴。标题模糊图像的轴包含图像类型的对象。

图像不太明显;您无法再读取车牌。

去模糊图像

为了消除模糊,假设您知道模糊算子D。您能在多大程度上消除模糊并恢复原始图像P?

最简单的方法是解决一个最小二乘问题x:

( D x - G 2. ) 从属于 0 x 1. .

这个问题采用模糊矩阵D并试图找到x那就Dx最接近G=数据处理. 为了使解决方案表示合理的像素值,请将解决方案限制在0到1之间。

lb=0(mn,1);ub=1+lb;sol=lsqlin(D,G,[],[],[],[],[],[],[],[],lb,ub);
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
xpic=重塑(sol、m、n);图imshow(xpic)标题(“去模糊图像”)

图中包含一个轴。标题为“去模糊图像”的轴包含类型为“图像”的对象。

除掩饰图像比模糊图像更清晰。您可以再次读取车牌。然而,去掩饰图像具有一些伪像,例如右下方路面区域中的水平带。也许这些工件可以通过正则化删除。

正规化

正则化是平滑解的一种方法。有许多正则化方法。对于一种简单的方法,在目标函数中添加一个术语,如下所示:

( ( D + ε. ) x - G 2. ) 从属于 0 x 1. .

术语 ε. 使生成的二次问题更加稳定 ε. = 0 . 0 2. 并再次解决问题。

addi = speye(mn);sol2 = lsqlin(d + 0.02 * addi,g,[],[],[],[],LB,UB);
找到满足约束的最小值。优化完成是因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。
xpic2=重塑(sol2,m,n);图imshow(xpic2)标题(“去模糊正则化图像”)

图包含轴。具有标题下式正则化图像的轴包含类型图像的对象。

显然,这种简单的正则化并不能消除伪影。

相关话题