利用ENVIIDL实现图像清晰度评价——点锐度算法


清晰度是图像细节边缘变化的敏锐程度。在图像细节的边缘处,光学密度或亮度随位置的变化越敏锐(变化快)、越剧烈(反差大),则细节的边缘就越清晰,可辨程度越高。在人类感知图像时,人眼对图像的模糊程度非常敏感,因此在图像质量评价时(image quality assessment, IQA),图像画面的清晰度起到举足轻重的作用。使用点锐度作为表征图像内容特征的参数,其计算公式如下:

其中,m、n为图像的长和宽,df为灰度变化幅值,dx为像元间的距离增量。公式可描述为:逐个对图像中的每点取8邻域点与之相减,先求8个差值的加权和(权的大小取决于距离,距离远,则权小,如45°和135°方向的差值需乘以1/),再将所有点所得值相加除以像素总个数。公式可以理解为对图像每点周围的灰度扩散程度的统计,即扩散程度越剧烈,其值越大,图像越清晰。从另一个角度看,该算法可以近似地等同于对图像点扩展函数能量分布情况的统计。

利用ENVIIDL实现图像点锐度计算:

;+
; 计算图像点锐度
;
; 示例代码
;
; 作者:‘西北狼人’GIS博客,小韩同学
; 
; 修改:马宇龙
;
; 联系方式:mayl@geoscene.cn
;-
PRO Point_Sharpness_Method

  COMPILE_OPT idl2

  ENVI, /restore_base_save_files
  ENVI_BATCH_INIT

  input_file = DIALOG_PICKFILE(title = '请选择要打开的文件:')
  ENVI_OPEN_FILE, input_file, r_fid=fid
  IF (fid EQ -1) THEN BEGIN
    ENVI_BATCH_EXIT
    RETURN
  ENDIF

  ;获取图像基本信息
  ENVI_FILE_QUERY, fid, dims=dims, nb=nb, nl=nl, ns=ns

  FOR b = 0, nb-1 DO BEGIN

    data = ENVI_GET_DATA(DIMS=dims, FID=fid, POS=b)

    ;清晰度计算
    size = nl * ns
    sum_dwin = 0

    FOR i = 1, ns-2 DO BEGIN
      FOR j = 1, nl-2 DO BEGIN

        ;获取3*3窗口
        t = data[[i-1]:[i+1], [j-1]:[j+1]]
        ;对窗口做计算
        d1 = ABS(t[0,0]-t[1,1])/1.414
        d2 = ABS(t[0,1]-t[1,1])/1.0
        d3 = ABS(t[0,2]-t[1,1])/1.414
        d4 = ABS(t[1,0]-t[1,1])/1.0
        d5 = ABS(t[1,2]-t[1,1])/1.0
        d6 = ABS(t[2,0]-t[1,1])/1.414
        d7 = ABS(t[2,1]-t[1,1])/1.0
        d8 = ABS(t[2,2]-t[1,1])/1.414
        ;计算df/dx
        dwin = d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8

        sum_dwin = sum_dwin + dwin

      ENDFOR
    ENDFOR

    ;输出每个波段图像的点锐度
    img_definition = sum_dwin / size
    PRINT, 'Band ' + STRTRIM(b+1, 2) + ' Point Sharpness: ' + STRTRIM(img_definition, 2)

  ENDFOR

END

 使用四幅清晰度不同的图片进行点锐度计算,结果如下:

点锐度

波段1

波段2

波段3

图a

551.657

674.861

660.997

图b

652.219

755.896

749.410

图c

713.677

806.389

800.249

图d

742.345

820.270

813.903

参考:

王鸿南,钟文,汪静,夏德深.图像清晰度评价方法研究.中国图象图形学报,2004(07):64-67.

姚军财, 申静. 基于图像内容对比感知的图像质量客观评价. 物理学报, 2020, 69(14): 148702.