冈萨雷斯《数字图像处理》第3版课后习题

本文详细解答了冈萨雷斯《数字图像处理》第3章的部分习题,涉及直方图均衡化、高斯PDF函数及其在Opencv中的实现,以及拉普拉斯变换的旋转不变性。通过讨论均值、标准差在图像处理中的作用,阐述了直方图均衡化不能得到完全平坦直方图的原因,并探讨了不同标准差对高斯PDF的影响。此外,还分析了不同尺寸拉普拉斯模板对图像锐化效果的影响。
摘要由CSDN通过智能技术生成

 

   

 

 

第3章

 

 

3.6

原题:试解释为什么离散直方图均衡技术一般不能得到平坦的直方图?

答:假设有一副图像,共有像素个数为n=MN(M行N列),像素灰度值取值范围为(0~255),那么该图像的灰度值的个数为L=256,为了提高图像的对比度,通常我们都希望像素的灰度值不要都局促到某一个狭窄的范围,也就是我们通常说的图像灰度值的动态分布小。最好是在有效灰度值取值范围上,每个灰度值都有MN/L个像素,这个时候我们就可以得到一张对比度最理想的图像,也就是说像素的取值跨度大,像素灰度值的动态范围大。

因为直方图是PDF(概率密度函数)的近似,而且在处理中,不允许造成新的灰度级,所以在实际的直方图均衡应用中,很少见到完美平坦的直方图。因此,直方图均衡技术不能保证直方图的均匀分布,但是却可以扩展直方图的分布范围,也就意味着在直方图上,偏向左的暗区和偏向右的亮区都有像素分布,只是不能保证每个灰度级上都有像素分布。

(百度答案:)由于离散图像的直方图也是离散的,其灰度累积分布函数是一个不减的阶梯函数。如果映射后的图像仍然能取到所有灰度级,则不发生任何变化。如果映射的灰度级小于256,变换后的直方图会有某些灰度级空缺。即调整后灰度级的概率基本不能取得相同的值,故产生的直方图不完全平坦。

 

 3.8

原题:在某些应用中,将输入图像的直方图模型化为高斯概率密度函数效果会是比较好的,高斯概率密度函数为:

                                         

其中m和σ分别是高斯概率密度函数的均值和标准差。具体处理方法是将m和σ看成是给定图像的平均灰度级和对比度。对于直方图均衡,您所用的变换函数是什么?

答:直方图均衡变换函数的一般表达式如下:
                                                

在回答这个问题时,有两点非常重要,需要学生表达清楚。

第一,   这个表达式假定灰度值r只有正值,然而,高斯密度函数通常的取值范围是-∞~∞,认识到这点是非常重要的,认识到这点,学生才能以多种不同的方式来解决问题。对于像标准差这样的假设,好的答案是,需要足够小,以便于当r为小于0时,在pr(r)曲线下的面积可以被忽略。另一种回答就是,将值(不知道什么值)按比例增大,直到r小于0部分的曲线下的面积可以被忽略。

第二,要让学生认识到,变换函数本身,
                                              

并没有闭合形式解(closed-form solution)。这是高斯密度函数的累积分布函数,该函数或者是数字可积的,或者其值有表可查。

第三点,不是很重要,但学生要说清楚,那就是r的高端值(high-end value)。再强调一遍,高斯PDF是趋于正无穷(+∞)的,一个可行性的方法就是根据标准差,和前面一样对其做个假设。另一个可行方法就是除以一个足够大的值,使得在大于r部分函数曲线下的面积可以忽略(这实际上就是相当于比例缩小标准差)。

学生还需做的工作就是处理直方图,此时的变换函数是一种和的形式。负值和超过r的正值问题还是需要说明白,对于这些问题,前面建议的答案依然适用。学生需要指出,直方图是通过对连续函数采样得到的,所以对于采样的比特位数应该给出建议。最可能的答案是8比特,此时学生还需描述函数缩放比例,以便其取值在[0,255]范围之内。

 

Opencv中的均值和标准差函数meanStdDev

C++: void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray

mask=noArray())

C: void cvAvgSdv(const CvArr* arr, CvScalar* mean, CvScalar* std_dev, const CvArr* mask=NULL )

Python: cv.AvgSdv(arr, mask=None) -> (mean, stdDev)

Parameters

  src – 输入矩阵,通道数为1~4,input array that should have from 1 to 4 channels so that the results can be stored in

    Scalar_ ‘s.

  mean – 输出参数,数据类型为Match,用于保存均值。

  stddev –输出参数,数据类型为Mat,用于保存标准差。

  mask – 可选的mask运算。

函数meanStdDev 用于计算每个通道上的均值和标准差,分别保存在mean和std_dev中。

meanStdDev实例

#include <iostream>

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main()

{

    Mat img=imread("D:/CodeWork/MyImage/baboon.jpg",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值