Gem_isp_denoise.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // =============================================================================
  2. // File : Gem_isp_denoise.h
  3. // Version : v1.0
  4. // Author : Honglei Zhu
  5. // Date : 2014.12.5
  6. // -----------------------------------------------------------------------------
  7. // Description :
  8. //
  9. // -----------------------------------------------------------------------------
  10. #ifndef __GEM_ISP_DENOISE_HEADFILE__
  11. #define __GEM_ISP_DENOISE_HEADFILE__
  12. #include "Gem_isp_ae.h"
  13. #define GEM_DENOISE_BASE (0x164)
  14. #define GEM_LUT_BASE (0x1a0)
  15. typedef struct isp_denoise_
  16. {
  17. unsigned short enable2d; // 3 bit space 2d denoise
  18. // bit 0 1 enable space 2d denoise, 0 disable
  19. // bit 1 定义亮度分量(Y)滤波强度系数的选择方法
  20. // 0 所有亮度分量的元素使用相同的滤波强度系数y_thres(噪声阈值), 滤波强度仅受噪声阈值影响.
  21. // 1 使用查找表(根据亮度值)与噪声阈值(y_thres)结合的方法定义滤波强度系数,
  22. // 每个亮度分量的元素的滤波既受噪声阈值影响, 也受该分量值大小的影响
  23. // (使用分量值大小查找17级线性查找表得到对应的幅度影响因子, 幅度强度因子越大, 滤波强度越大;
  24. // 当幅度影响因子均为最大值255时, 此时滤波等同于仅采用滤波阈值的方法).
  25. //
  26. // 1 使能 filter0/1的 y_thre0/1* noise0_lutdata
  27. // 当所有noise0_lutdata的表项值均为255时, 此时等同于不使用表的效果
  28. // 0 仅使用filter0/1的 y_thre0/1
  29. // bit 2 定义色度分量(CbCr)滤波强度系数的选择方法
  30. // 1 使能 filter0/1的 u_thre0/1* noise0_lutdata 及 v_thre0/1* noise0_lutdata
  31. // 0 仅使用filter0/1的 u_thre0/1 及 v_thre0/1
  32. //
  33. // 通过比较, 基于亮度信息的滤波效果非常明显. 通过色度信息的滤波效果非常轻微.
  34. unsigned short enable3d; // 3 bit temporty 3d denoise
  35. unsigned short sensitiv; // 0724 版本 3 bit
  36. unsigned short sensitiv0; // 新版本ISP的滤波器0(差分)的灵敏度设置, 3bit
  37. // 值越大, 表示相邻参与滤波的点的数量越多, 邻近点对当前点的影响越大, 滤波趋于平滑.
  38. // 0 滤波器关闭
  39. // 1 3个相邻点参与滤波
  40. // 5 表示11个点全部参与滤波.
  41. // 6,7 与5相同
  42. // 0, 3, 5, 7, 9, 11共6种相邻点选择方法
  43. unsigned short sensitiv1; // 新版本ISP的滤波器1(边沿)的灵敏度设置, 3bit
  44. // 值越大, 表示相邻参与滤波的点数量越多, 滤波的强度越大.
  45. // 0 滤波器关闭
  46. // 5 表示11个点全部参与滤波.
  47. // 6,7 与5相同
  48. unsigned short sel_3d_table; // 3D 高斯表选择(temp0-temp3)
  49. unsigned short sel_3d_matrix; // 3D 选择相关性区域
  50. // 0 邻近点矩阵区域
  51. // 1 中心点矩阵区域
  52. // 滤波器0的噪声阈值参数 (2D差分)
  53. unsigned short y_thres0; // 亮度分量Y阈值, 10 bit ,有效值 0 ~ 1023
  54. // 噪声增加时, 信噪比(snr)减小. 信噪比较差(信号强度不变, 噪声强度增加, snr下降)的像素点增多;
  55. // 增加滤波的噪声阈值, 将低于该噪声阈值的更多的低信噪比像素点进行滤波处理, 提升最终图像的信噪比.
  56. // 阈值越大, 参与滤波的像素点越多, 滤波越平滑, 图像解析度趋于降低(图像趋于模糊)
  57. unsigned short u_thres0; // 色度分量Cb阈值, 10 bit ,有效值 0 ~ 1023
  58. unsigned short v_thres0; // 色度分量Cr阈值, 10 bit ,有效值 0 ~ 1023
  59. // 滤波器1的噪声阈值参数 (2D边沿), 边沿滤波会保护边缘的细节。
  60. unsigned short y_thres1; // 10 bit ,有效值 0 ~ 1023
  61. unsigned short u_thres1; // 10 bit ,有效值 0 ~ 1023
  62. unsigned short v_thres1; // 10 bit ,有效值 0 ~ 1023
  63. // 滤波器2的噪声阈值参数 (3D)
  64. unsigned short y_thres2; // 10 bit ,
  65. unsigned short u_thres2; // 10 bit ,
  66. unsigned short v_thres2; // 10 bit ,
  67. // 强度(已废弃)
  68. unsigned short y_strength0;//10bit
  69. unsigned short y_strength1;//10bit
  70. unsigned short y_strength2;//10bit
  71. unsigned short u_strength0;//10bit
  72. unsigned short u_strength1;//10bit
  73. unsigned short u_strength2;//10bit
  74. unsigned short v_strength0;//10bit
  75. unsigned short v_strength1;//10bit
  76. unsigned short v_strength2;//10bit
  77. // 2D查找表
  78. unsigned char noise0[17]; // 8bit, 0 ~ 255
  79. // 2d space noise0_lutdata (按照Y/CbCr的强度值从0~255的16等分插值查找表)
  80. // 可以根据亮度分量Y(或者CbCr分量)的强度值设计不同的滤波强度.
  81. // 如下的强度表
  82. // 索引(分量强度) 滤波强度系数 说明
  83. // 0 (0 ), 255 (最小分量或者低光处的snr信噪比最小, 安排最大的滤波强度)
  84. // 1 (16 ), 255
  85. // ...
  86. // 16 (255), 223 (最大分量或者最亮点的snr信噪比最大, 安排最小的滤波强度)
  87. // 值越大, 滤波强度越大
  88. // 3D查找表
  89. unsigned char noise1[17]; // 8bit, 0 ~ 255
  90. // 3d temporty lutdata
  91. } isp_denoise_t;
  92. typedef struct isp_denoise_ *isp_denoise_ptr_t;
  93. void isp_denoise_init (isp_denoise_ptr_t p_denoise);
  94. void isp_denoise_init_io (isp_denoise_ptr_t p_denoise);
  95. void isp_denoise_run (isp_denoise_ptr_t p_denoise, isp_ae_ptr_t p_ae);
  96. #endif // #ifndef __GEM_ISP_DENOISE_HEADFILE__