主要内容

使用Lucy-Richardson算法去模糊图像

这个例子展示了如何使用Lucy-Richardson算法去模糊图像。当点扩散函数PSF(模糊算子)已知,但噪声信息很少或没有时,可以有效地利用它。采用迭代加速阻尼Lucy-Richardson算法对模糊和噪声图像进行恢复。可以利用光学系统的特性作为输入参数来提高图像恢复的质量。

第一步:阅读图像

该示例读取RGB图像并将其裁剪为256 × 256 × 3。的解压函数可以处理任意维度的数组。

I=imread(“board.tif”);我= (50 + (1:256),2 + (1:256):);图;imshow(我);标题(“原始图像”);文本(大小(I,2),大小(I,1)+15,...“图片由亚历山大·帕纳修克博士提供”...“字体大小”7“HorizontalAlignment”“对”); 文本(大小(I,2),大小(I,1)+25,...“哈佛史密森天体物理中心”...“字体大小”7“HorizontalAlignment”“对”);

图中包含一个轴。标题为“原始图像”的轴包含3个类型为“图像”、“文本”的对象。

步骤2:模拟模糊和噪声

模拟现实生活中的图像,可能会由于相机运动或缺乏聚焦而模糊。由于随机干扰,图像也可能有噪声。这个例子模拟模糊通过卷积一个高斯滤波器与真实的图像(使用imfilter).高斯滤波器表示一个点扩散函数,PSF

PSF=f特殊(“高斯”,5,5); 模糊=imfilter(I,PSF,“对称”“conv”);图;imshow(模糊);标题(“模糊”);

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

该示例通过添加方差的高斯噪声来模拟噪声V到模糊图像(使用imnoise).噪声方差V用于定义算法的阻尼参数。

V = .002;BlurredNoisy = imnoise(模糊,“高斯”,0,V);图形;imshow(模糊噪音);标题(模糊和噪声的);

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

步骤3:恢复模糊和噪声图像

恢复模糊和噪声图像提供PSF,只使用5次迭代(默认是10次)。输出是一个与输入图像类型相同的数组。

luc1 = deconvlucy (BlurredNoisy PSF 5);图;imshow (luc1);标题('恢复的图像,NUMIT = 5');

图中包含一个坐标轴。标题为restore Image, NUMIT = 5的轴包含一个Image类型的对象。

步骤4:反复探索恢复

每次迭代得到的图像都会发生变化。为了研究图像恢复的演变,您可以按步骤进行反卷积:进行一组迭代,查看结果,然后从停止的地方继续迭代。为此,输入图像必须作为单元格数组的一部分传递。例如,通过传入开始第一组迭代{BlurredNoisy}而不是BlurredNoisy作为输入图像参数。

luc1_cell=deconvlucy({blurrednoised},PSF,5);

在这种情况下,输出,luc1_cell,变成单元格数组。单元格输出由四个数字数组组成,其中第一个是BlurredNoisyimage,第二个是double类的恢复映像,第三个数组是上一次迭代之前的结果,第四个数组是迭代集的内部参数。输出单元格数组的第二个数字数组,imageluc1_cell {2},与步骤3,image的输出数组相同luc1,但它们的类可能有例外(单元输出总是给出类double的恢复图像)。

要恢复迭代,请获取上一个函数调用的输出,即单元格数组luc1_cell,并把它传递给解压函数。使用默认的迭代次数(努米特=10)。还原的图像是总共15次迭代的结果。

luc2_单元=解vlucy(luc1_单元,PSF);luc2=im2uint8(luc2_单元{2});图形imshow(luc2);头衔('恢复的图像,NUMIT = 15');

图中包含一个轴。标题为“已还原图像”(NUMIT=15)的轴包含类型为“图像”的对象。

第五步:通过阻尼控制噪声放大

最新的图像,luc2,是15次迭代的结果。虽然它比之前5次迭代的结果更清晰,图像发展出“斑点”的外观。斑点并不对应于任何真实的结构(与真实图像相比),而是数据中噪声拟合得太近的结果。

要控制噪声放大,请通过指定DAMPAR参数DAMPAR必须与输入图像属于同一类别。该算法在与噪声相比差异较小的区域抑制模型中的变化DAMPAR这里使用的等于噪音的3个标准差。注意图像变得更平滑了。

DAMPAR = im2uint8 (3 * sqrt (V));luc3 = deconvlucy (DAMPAR BlurredNoisy PSF, 15日);图;imshow (luc3);标题('恢复图像与阻尼,NUMIT = 15');

图中包含一个坐标轴。标题为“restore Image with Damping, NUMIT = 15”的轴包含一个类型为Image的对象。

本例的下一部分将探讨重量SUBSMPL输入反vlucy函数的参数,使用一个模拟的星象(为了简单和速度)。

步骤6:创建样本图像

这个例子创建了一个四星的黑白图像。

I = 0 (32);我(5,5)= 1;我(10,3)= 1;我(27岁,26)= 1;25我(29日)= 1;图;imshow([],我“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTickLabel = [];斧子。YTickLabel = [];斧子。XTick = [7 24];斧子。XGrid =“上”;斧子。YTick = [5 28];斧子。YGrid =“上”;标题(“数据”);

图中包含一个坐标轴。标题为Data的轴包含一个类型为image的对象。

步骤7:模拟模糊

这个例子通过创建高斯滤波器来模拟星星图像的模糊,PSF,并将其与真实图像卷积。

PSF=f特殊(“高斯”15日3);模糊= imfilter (PSF,我“conv”“符号”);

现在,模拟一个只能观察部分恒星图像(只能看到模糊)的相机。创建一个权重函数数组,权重,它由模糊图像中心部分的一个(“好”像素,位于虚线内)和边缘的零(“坏”像素-那些没有接收到信号的像素)组成。

WT = 0 (32);WT(回8:23)= 1;CutImage =模糊。* WT;

为了减少与边界相关的环形,对给定的PSF应用edgetaper函数。

CutEdged = edgetaper (CutImage PSF);图;imshow (1-CutEdged [],“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTickLabel = [];斧子。YTickLabel = [];斧子。XTick = [7 24];斧子。XGrid =“上”;斧子。YTick = [5 28];斧子。YGrid =“上”;标题(“观察到”);

图中包含一个坐标轴。标题为Observed的轴包含一个image类型的对象。

步骤8:提供权重数组

该算法在恢复图像时根据权重数组对每个像素值进行加权。在我们的示例中,仅使用中心像素的值(其中权重=1),而“坏”像素值被排除在优化范围之外。但是,该算法可以将信号功率放入这些“坏”像素的位置像素,超出相机视图边缘。请注意解析星点位置的准确性。

luc4 = deconvlucy (CutEdged PSF 300 0 WT);图;imshow (1-luc4 [],“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTickLabel = [];斧子。YTickLabel = [];斧子。XTick = [7 24];斧子。XGrid =“上”;斧子。YTick = [5 28];斧子。YGrid =“上”;标题(“恢复”);

图中包含一个轴。标题已恢复的轴包含一个image类型的对象。

第9步:提供一个更好采样的PSF

deconvlucy可以在给定更精细采样PSF(通过子采样次数更精细)的情况下恢复欠采样图像变模糊图像和原始PSF,在每个维度上一个两个像素。

Binned = squeeze(sum(整形(模糊,[2 16 2 16])));BinnedImage =挤压(sum(分箱,2));Binned = squeeze(sum(整形(PSF(1:14,1:14),[2 7 2 7]));BinnedPSF =挤压(sum(分箱,2));图;imshow (1-BinnedImage [],“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTick = [];斧子。YTick = [];标题(“宾尼观察到”);

图中包含一个坐标轴。标题为Binned Observed的轴包含一个image类型的对象。

恢复欠采样图像,BinnedImage,使用欠采样PSF,宾内德普斯夫.请注意luc5图像只能分辨出3颗星。

luc5 = deconvlucy (BinnedImage BinnedPSF 100);图;imshow (1-luc5 [],“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTick = [];斧子。YTick = [];标题(“可怜的PSF”);

Figure包含一个轴。标题为Poor PSF的轴包含一个image类型的对象。

下一个示例恢复欠采样图像(BinnedImage),这次使用更精细的PSF(在子采样乘以精细网格上定义)。重建图像(luc6)可以更精确地确定星星的位置。注意它是如何在图像右下角的两颗恒星之间分配能量的。这暗示有两个明亮的物体存在,而不是像上次修复时一样只有一个。

luc6 = deconvlucy (BinnedImage PSF, 100 ,[],[],[], 2);图;imshow (1-luc6 [],“InitialMagnification”“健康”); ax=gca;可见的=“上”;斧子。XTick = [];斧子。YTick = [];标题(“好PSF”);

图中包含一个轴。标题为Fine PSF的轴包含一个image类型的对象。

另请参阅

|||

相关的话题