【ISP】ISP pipeline(AI)

ISP Pipeline 全流程概览

ISP(Image Signal Processing,图像信号处理)流程通常从原始 Bayer 数据出发,经过一系列模块处理,逐步完成图像校正和增强,最终生成用于显示或编码的标准图像。常见处理模块包括:

DPC(Defect Pixel Correction) – 坏点检测与修复
BLC(Black Level Correction) – 黑电平校正
NR(Noise Reduction) – 降噪处理
LSC(Lens Shading Correction) – 镜头阴影校正
AWB(Auto White Balance) – 自动白平衡
Demosaic – 彩色插值
CCM(Color Correction Matrix) – 颜色校正矩阵
Gamma Correction – 伽马校正
EE(Edge Enhancement) – 边缘增强
YUV/CSC – 颜色空间转换(RGB→YUV)


MTK67/68 平台 ISP Pipeline 调试大纲

1. ISP Pipeline 总览

  • 定义与流程
    • 解释 ISP Pipeline 的基本概念,即如何从原始 Bayer 图像(Raw Image)经过逐级处理(如 DPC → BLC → NR → LSC → AWB → Demosaic → CCM → Gamma → EE → YUV/CSC)最终输出标准图像。
  • 整体目标
    • 保障图像质量、色彩还原、亮度调节与噪声控制。

2. 各模块详细参数说明

针对 MTK67/68 平台,列出常用的各模块及其调试参数:

2.1. DPC(Defect Pixel Correction,坏点修复)

  • 常见参数:
    • DPC_Enable:启用/禁用坏点修复。
    • DPC_Threshold:坏点检测的阈值。
    • DPC_Mode:修复模式(静态/动态)。
  • 作用与场景:
    • 自动检测传感器中的异常像素,修复后减少图像出现亮点或暗点。
    • 适用于生产及后期图像质量提升。
  • 预期效果:
    • 图像整体更干净,无明显坏点。

2.2. BLC(Black Level Correction,黑电平校正)

  • 常见参数:
    • BLC_Offset_R/G/B:各通道黑电平偏移量。
  • 作用与场景:
    • 校正传感器输出的基准电平,确保暗部正确还原。
    • 应用于低照度或暗场环境下的图像调优。
  • 预期效果:
    • 暗部细节更加丰富,无灰雾或色偏。

2.3. NR(Noise Reduction,降噪处理)

  • 常见参数:
    • NR_Luma_Strength:亮度降噪强度。
    • NR_Chroma_Strength:色度降噪强度。
    • NR_Spatial_WeightNR_Temporal_Weight:空间与时间降噪权重。
  • 作用与场景:
    • 抑制高 ISO 或低光环境下产生的噪点,保证图像清晰。
    • 涉及多场景下的降噪调优。
  • 预期效果:
    • 图像噪点减少,细节保留更好。

2.4. LSC(Lens Shading Correction,镜头阴影校正)

  • 常见参数:
    • LSC_Gain_Map:增益映射表(例如 17×17 矩阵)。
    • LSC_Center_XLSC_Center_Y:镜头中心坐标。
  • 作用与场景:
    • 补偿因镜头结构造成的边缘暗角现象。
    • 广角镜头、大光圈镜头典型应用。
  • 预期效果:
    • 图像中心与边缘亮度衔接自然,无明显暗角。

2.5. AWB(Auto White Balance,自动白平衡)

  • 常见参数:
    • AWB_Gain_R/G/B:各通道增益。
    • AWB_Light_Source:光源类型选项(如日光、阴天、白炽灯)。
  • 作用与场景:
    • 自动调节白平衡,确保在不同光照条件下色彩还原准确。
    • 较为复杂的环境调整中尤为重要。
  • 预期效果:
    • 白色物体保持中性,整体色彩自然。

2.6. Demosaic(彩色插值)

  • 常见参数:
    • Demosaic_Algorithm:插值算法选择(线性、边缘感知等)。
    • Demosaic_Threshold:边缘检测阈值。
  • 作用与场景:
    • 将原始 Bayer 数据转换为全彩图像,减少伪色和摩尔纹。
    • 特别需要在细节和边缘处理场景中调优。
  • 预期效果:
    • 图像细节恢复良好,伪色减少。

2.7. CCM(Color Correction Matrix,颜色校正矩阵)

  • 常见参数:
    • CCM_Matrix[3][3]:9元素颜色校正矩阵。
    • CCM_Offset_R/G/B:颜色偏移补偿。
    • CCM_Scenario_Mode:根据场景(如 Daylight、Fluorescent 等)切换矩阵。
  • 作用与场景:
    • 把传感器原始颜色转换为标准 RGB,确保色彩准确。
    • 依赖于不同光源场景的色温调整。
  • 预期效果:
    • 色彩还原真实,减少颜色偏差。

2.8. Gamma(伽马校正)

  • 常见参数:
    • Gamma_LUT[256]:查找表实现输入到输出映射。
    • Gamma_Segmented_Curve:分段伽马曲线设置。
    • Gamma_Scene_Mode:场景模式切换(Night/Normal/Outdoor)。
  • 作用与场景:
    • 调整图像亮度分布,使视觉感受更自然。
    • 针对不同场景设计不同的 gamma 曲线。
  • 预期效果:
    • 图像灰阶平滑过渡,细节表现更佳。

2.9. EE(Edge Enhancement,边缘增强)

  • 常见参数:
    • EE_Strength:增强强度(数值范围如 0-15)。
    • EE_Threshold:边缘触发门限。
    • EE_HPF_Gain:高频信号增益。
  • 作用与场景:
    • 强化图像边缘,使细节更加清晰。
    • 应用于文字、轮廓清晰要求较高的场景,但避免过度引起伪影。
  • 预期效果:
    • 图像锐度提升,但避免 halo 效果。

2.10. YUV/CSC(YUV 数据格式与颜色空间转换)

  • 常见参数:
    • YUV_Format:格式选择(NV21、NV12、422 等)。
    • CSC_Matrix:RGB 到 YUV 的转换矩阵。
    • UV_Swap_Enable:是否交换 U/V 通道。
    • Range_Mode:全范围与限范围设定。
  • 作用与场景:
    • 将 RGB 数据转换为适合显示或编码的 YUV 格式。
    • 在实时预览、视频编码中尤为关键。
  • 预期效果:
    • 色彩、亮度精准还原,格式符合输出要求。

3. 调试脚本示例(MTK67/68 平台案例)

3.1. MTK 平台配置示例(配置文件格式)

  • 示例文件:
    [ISP_DPC]
    Enable = 1
    Threshold = 16
    Mode = Dynamic[ISP_BLC]
    R_Offset = 64
    G_Offset = 64
    B_Offset = 64[ISP_NR]
    Luma_Strength = 5
    Chroma_Strength = 3[ISP_AWB]
    Enable = 1
    Mode = Auto
    R_Gain = 1.15
    B_Gain = 0.98
    
  • 说明:
    • 通过修改配置文件来导入调试工具进行参数烧写与实时测试。

3.2. 高通平台配置示例(XML 格式)

  • 示例文件:
    <module name="DPC"><enable>1</enable><threshold>18</threshold>
    </module>
    <module name="BLC"><r_offset>64</r_offset><g_offset>64</g_offset><b_offset>64</b_offset>
    </module>
    <module name="AWB"><r_gain>1.2</r_gain><b_gain>1.1</b_gain><mode>gray_world</mode>
    </module>
    <module name="LSC"><table><!-- 17x17 表格数据 --></table>
    </module>
    
  • 说明:
    • 高通平台通常通过 XML 配置,结合专用调试工具(如 QXDM 或 Camera IQ Tuning Tool)进行调参。

4. 主观测试图模板建议

针对每个模块,在日常调试中可使用以下测试图模板评估效果:

  • DPC:

    • 测试图: 暗场图(黑布或盖镜头)
    • 作用: 检查坏点修复是否正常,是否仍有漏修或误修现象。
  • BLC:

    • 测试图: 灰卡或黑场拍摄
    • 作用: 检查各通道黑电平是否准确,避免暗部偏色。
  • NR:

    • 测试图: 高 ISO 条件下的细节图(如书架、桌面)
    • 作用: 检测降噪效果,比较细节保留与噪声抑制的平衡。
  • LSC:

    • 测试图: 均匀白墙或灰卡图像
    • 作用: 评估中心与边缘亮度补偿效果,检查是否存在明显暗角。
  • AWB:

    • 测试图: 灰卡、色卡(如 X-Rite 标准色卡)
    • 作用: 判断白平衡准确性,验证不同光源下的颜色还原。
  • Demosaic:

    • 测试图: 梳子、报纸、线条图
    • 作用: 检测伪色和摩尔纹情况,观察细节的完整性。
  • CCM:

    • 测试图: X-Rite 24色卡
    • 作用: 评估整体色彩还原准确性,量化 DeltaE 值。
  • Gamma:

    • 测试图: 灰阶图、黑白对比图
    • 作用: 检查图像亮度分布,确保灰阶过渡自然。
  • EE:

    • 测试图: 高对比边缘图(如毛发、金属边缘)
    • 作用: 判断细节锐化效果与副作用(如 halo 效应)。
  • YUV/CSC:

    • 测试图: YUV 格式测试图
    • 作用: 校验输出格式是否正确、颜色是否存在偏差或 UV 交换错误。

5. 总结与后续建议

  • 整体调试流程:

    • 先从基础模块(如 DPC、BLC)入手,再逐步调优细节(NR、AWB、CCM 等)。
    • 结合主客观测试(测试图与量化指标)综合判断调参效果。
  • 调试工具推荐:

    • MTK 平台: 使用专用配置文件、CameraTool 与调试软件。
    • 高通平台: 使用 XML 文件配合 QXDM、Camera IQ Tuning Tool 进行逐寄存器调试。
  • 进阶需求:

    • 根据不同传感器及场景,进一步优化各模块参数。
    • 针对具体问题(如坏点漏检、色偏异常),调整对应参数并使用相应测试图进行验证。

6. 附录:关键术语释义

  • Bayer 格式: 摄像头常用的颜色滤光片排列方式。
  • DeltaE: 颜色差异的量化指标。
  • LUT(查找表): 用于转换输入输出值的预设数据表。
  • 动态与静态模式: 动态模式通常根据实时场景调整参数;静态模式则使用固定配置。

下面提供一份详细的 ISP Pipeline 每一部分算法原理解析,从整体流程、关键步骤讲解,到伪代码示例与详细注释,方便初学者从代码层面和理论原理上全面理解各模块的作用。


ISP Pipeline 全流程概览

ISP(Image Signal Processing,图像信号处理)流程通常从原始 Bayer 数据出发,经过一系列模块处理,逐步完成图像校正和增强,最终生成用于显示或编码的标准图像。常见处理模块包括:

  1. DPC(Defect Pixel Correction) – 坏点检测与修复
  2. BLC(Black Level Correction) – 黑电平校正
  3. NR(Noise Reduction) – 降噪处理
  4. LSC(Lens Shading Correction) – 镜头阴影校正
  5. AWB(Auto White Balance) – 自动白平衡
  6. Demosaic – 彩色插值
  7. CCM(Color Correction Matrix) – 颜色校正矩阵
  8. Gamma Correction – 伽马校正
  9. EE(Edge Enhancement) – 边缘增强
  10. YUV/CSC – 颜色空间转换(RGB→YUV)

各模块既有其独立的功能,又需要前后相互配合,下面按模块详细解析其算法原理并附上伪代码示例及注释说明。


1. DPC – Defect Pixel Correction(坏点修复)

算法原理

  • 目标:检测并修复传感器中由于制造缺陷或老化导致的坏点,避免这些异常像素影响最终图像质量。
  • 实现思路:对于每个像素,通过比较与其邻域像素的差异来判断其是否为坏点;一旦判定为坏点,则用邻域像素的中值或加权平均值替代。

伪代码示例(C-like 风格)

// 输入:raw_image[][] 为原始传感器数据,threshold 为坏点检测阈值
for (int i = 1; i < height - 1; i++) {for (int j = 1; j < width - 1; j++) {// 获取像素 (i,j) 周围3x3邻域数据(不包括自身也可包括)int neighbors[8];int idx = 0;for (int m = -1; m <= 1; m++) {for (int n = -1; n <= 1; n++) {if (m == 0 && n == 0)continue; // 排除自身neighbors[idx++] = raw_image[i + m][j + n];}}// 计算邻域中值int median = compute_median(neighbors, 8);// 如果当前像素与中值差异超过阈值,则认为是坏点if (abs(raw_image[i][j] - median) > threshold) {// 修复:用中值替换坏点raw_image[i][j] = median;}}
}

注释说明:

  • compute_median:计算数组中值的函数(可用排序或者选择算法实现)。
  • 通过比较当前像素值与邻域中值的差距判断是否异常,简单有效但实际算法可能会结合更多统计特性或动态阈值。

2. BLC – Black Level Correction(黑电平校正)

算法原理

  • 目标:校正每个通道(R、G、B)的基准黑电平,消除传感器在暗部输出的偏置。
  • 实现思路:从图像的每个像素中减去预先测量得到的黑电平偏移量,通常对不同颜色通道采用不同的偏移值。

伪代码示例

// 假设 black_offset_R, black_offset_G, black_offset_B 为各通道的校正值
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {// 读取当前像素的 Bayer 格式值,根据位置判定其颜色通道if (isRedPixel(i, j)) {raw_image[i][j] = max(raw_image[i][j] - black_offset_R, 0);} else if (isGreenPixel(i, j)) {raw_image[i][j] = max(raw_image[i][j] - black_offset_G, 0);} else if (isBluePixel(i, j)) {raw_image[i][j] = max(raw_image[i][j] - black_offset_B, 0);}}
}

注释说明:

  • isRedPixel/isGreenPixel/isBluePixel:判断像素在 Bayer 格式下的颜色位置(如RGGB、BGGR等排列规则)。
  • 使用 max 保障输出不为负数。

3. NR – Noise Reduction(降噪处理)

算法原理

  • 目标:减少图像中由于高 ISO、低光等条件下产生的随机噪声,同时尽量保留细节。
  • 实现思路:常见方法包括空间滤波(如均值、Gaussian或中值滤波)、时间滤波(帧间降噪)以及结合两者的混合方法。

伪代码示例(使用 3x3 高斯滤波)

// 定义一个简单的 3x3 Gaussian 模板
float kernel[3][3] = {{1/16.0, 2/16.0, 1/16.0},{2/16.0, 4/16.0, 2/16.0},{1/16.0, 2/16.0, 1/16.0}
};for (int i = 1; i < height - 1; i++) {for (int j = 1; j < width - 1; j++) {float sum = 0.0;// 对 3x3 邻域做卷积for (int m = -1; m <= 1; m++) {for (int n = -1; n <= 1; n++) {sum += raw_image[i + m][j + n] * kernel[m + 1][n + 1];}}// 将滤波结果存入降噪图像(可以直接覆盖或存到另一个缓冲区)denoised_image[i][j] = (int)sum;}
}

注释说明:

  • 实际中会针对亮度(Luma)和色度(Chroma)分别设定不同的降噪强度。
  • 空间滤波虽简单,但可能造成细节损失,故高端方案会采用自适应或多尺度方法。

4. LSC – Lens Shading Correction(镜头阴影校正)

算法原理

  • 目标:补偿由于镜头光照不均(中心亮、边缘暗)产生的暗角现象。
  • 实现思路:预先标定或计算得到一个增益表(Gain Map),每个位置对应一个增益因子,处理时将该因子与原始像素值相乘。

伪代码示例

// 假设 gain_map 是一个二维数组(例如 17x17),需通过插值映射到整幅图像上
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {// 根据 (i, j) 坐标计算在 Gain Map 中的对应位置,并进行双线性插值获取增益值float gain = interpolate_gain(gain_map, i, j, height, width);// 应用校正:乘以增益corrected_image[i][j] = raw_image[i][j] * gain;}
}

注释说明:

  • interpolate_gain:将图像坐标映射到较小增益表,并通过双线性插值计算增益;该函数依赖于标定数据。
  • 校正后注意边缘可能需裁剪或平滑处理。

5. AWB – Auto White Balance(自动白平衡)

算法原理

  • 目标:在不同光照条件下自动调整各色通道增益,使得白色或中性区域呈现中性灰色。
  • 实现思路:常用的方法有灰世界假设(所有颜色平均值应相等)、最大白补偿法等;计算各通道平均值后,确定增益补偿。

伪代码示例

// 统计图像中各通道的平均值
long sum_R = 0, sum_G = 0, sum_B = 0;
int count_R = 0, count_G = 0, count_B = 0;for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {if (isRedPixel(i, j)) {sum_R += raw_image[i][j];count_R++;} else if (isGreenPixel(i, j)) {sum_G += raw_image[i][j];count_G++;} else if (isBluePixel(i, j)) {sum_B += raw_image[i][j];count_B++;}}
}// 计算平均值
float avg_R = (float)sum_R / count_R;
float avg_G = (float)sum_G / count_G;
float avg_B = (float)sum_B / count_B;// 根据灰世界假设,理想状态各通道平均值应相等,这里采用绿色作为参考
float gain_R = avg_G / avg_R;
float gain_B = avg_G / avg_B;// 对图像所有相应通道应用增益补偿
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {if (isRedPixel(i, j)) {awb_image[i][j] = raw_image[i][j] * gain_R;} else if (isGreenPixel(i, j)) {awb_image[i][j] = raw_image[i][j];  // 通常保持不变} else if (isBluePixel(i, j)) {awb_image[i][j] = raw_image[i][j] * gain_B;}}
}

注释说明:

  • 此处采用简单灰世界算法,实际系统可能结合局部统计和区域分割对不同区域分别调节。
  • 调整后的结果需进一步与色卡比对验证准确性。

6. Demosaic – 彩色插值

算法原理

  • 目标:将拜耳格式的单色通道数据重建为全彩(RGB)图像。
  • 实现思路:根据 Bayer 模式(如 RGGB),使用邻域插值方法(例如双线性插值、方向插值等)填充各像素缺失的颜色信息。

伪代码示例(简单双线性插值示例)

// 输出三通道图像 rgb_image[h][w][3]
for (int i = 1; i < height - 1; i++) {for (int j = 1; j < width - 1; j++) {// 根据 Bayer 排列判断当前像素类别if (isRedPixel(i, j)) {rgb_image[i][j][0] = raw_image[i][j]; // red// 绿色取左右或上下的平均rgb_image[i][j][1] = (raw_image[i][j - 1] + raw_image[i][j + 1] +raw_image[i - 1][j] + raw_image[i + 1][j]) / 4;// 蓝色取对角线平均rgb_image[i][j][2] = (raw_image[i - 1][j - 1] + raw_image[i - 1][j + 1] +raw_image[i + 1][j - 1] + raw_image[i + 1][j + 1]) / 4;} else if (isGreenPixel(i, j)) {// 类似算法,依据具体位置计算缺失通道//……} else if (isBluePixel(i, j)) {rgb_image[i][j][2] = raw_image[i][j]; // blue// 补充 red 和 green 通道同上操作//……}}
}

注释说明:

  • 此示例仅展示一种简单的双线性插值方法,实际应用中可采用方向敏感插值以减少马赛克伪影。
  • 分别对不同 Bayer 格式需要区分算法细节。

7. CCM – Color Correction Matrix(颜色校正矩阵)

算法原理

  • 目标:使用颜色校正矩阵将传感器采集的原始 RGB 数据转换为标准颜色空间,以达到色彩还原的目的。
  • 实现思路:对每个像素的 RGB 分量做线性变换,公式为:
    在这里插入图片描述

伪代码示例

// 假设 ccm_matrix 为 3x3 浮点数组,ccm_offset 为 3 元素的偏移数组
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {float R = rgb_image[i][j][0];float G = rgb_image[i][j][1];float B = rgb_image[i][j][2];// 线性变换计算float new_R = ccm_matrix[0][0] * R + ccm_matrix[0][1] * G + ccm_matrix[0][2] * B + ccm_offset[0];float new_G = ccm_matrix[1][0] * R + ccm_matrix[1][1] * G + ccm_matrix[1][2] * B + ccm_offset[1];float new_B = ccm_matrix[2][0] * R + ccm_matrix[2][1] * G + ccm_matrix[2][2] * B + ccm_offset[2];// 限制输出范围在 [0,255]rgb_image[i][j][0] = clamp(new_R, 0, 255);rgb_image[i][j][1] = clamp(new_G, 0, 255);rgb_image[i][j][2] = clamp(new_B, 0, 255);}
}

注释说明:

  • clamp 函数确保校正后数值在有效显示范围内。
  • 校正矩阵和偏移值通常在标定阶段确定,并可能根据不同场景(如日光、荧光灯等)动态切换。

8. Gamma Correction(伽马校正)

算法原理

  • 目标:调整图像的亮度分布,使图像更符合人眼对明暗非线性感知的特点。
  • 实现思路:通过预先计算的 Gamma LUT(查找表)实现非线性映射,将输入像素映射到新的输出值上。

伪代码示例

// 假设 gamma_LUT 为 256 元素的查找表(预先根据所需 gamma 值生成)
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {// 对每个颜色通道应用 Gamma LUTrgb_image[i][j][0] = gamma_LUT[rgb_image[i][j][0]];rgb_image[i][j][1] = gamma_LUT[rgb_image[i][j][1]];rgb_image[i][j][2] = gamma_LUT[rgb_image[i][j][2]];}
}

注释说明:

  • Gamma LUT 可通过公式生成,例如:
    [
    LUT[i] = \text{round}(255 \times (\frac{i}{255})^{\frac{1}{\gamma}})
    ]
  • 使用查找表比实时计算更高效。

9. EE – Edge Enhancement(边缘增强)

算法原理

  • 目标:提高图像边缘的清晰度,使物体轮廓更明显。
  • 实现思路:先提取图像中的细节信息(例如通过高通滤波),然后将细节信息按一定比例增强后加回原始图像,实现增强效果。

伪代码示例

// 采用简单的 unsharp mask 算法
// blurred 为对原始图像进行低通滤波后的结果(如使用 Gaussian 模糊)
for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {// 细节 = 原图 - 模糊图int detail = original_image[i][j] - blurred_image[i][j];// 增强后的图像 = 原图 + 增强因子 * 细节enhanced_image[i][j] = original_image[i][j] + EE_Strength * detail;// 限制范围,防止溢出enhanced_image[i][j] = clamp(enhanced_image[i][j], 0, 255);}
}

注释说明:

  • 关键参数 EE_Strength 控制增强幅度,过高会产生 halo 效果。
  • 低通滤波的选择(如 Gaussian、均值滤波)直接影响最终效果。

10. YUV/CSC – 颜色空间转换(RGB to YUV)

算法原理

  • 目标:将 RGB 图像转换为 YUV 格式,便于后续视频编码或显示。
  • 实现思路:使用线性转换公式将 RGB 分量转换为 Y(亮度)、U/V(色度)分量。

伪代码示例

for (int i = 0; i < height; i++) {for (int j = 0; j < width; j++) {int R = rgb_image[i][j][0];int G = rgb_image[i][j][1];int B = rgb_image[i][j][2];// 根据 BT.601 标准的常用转换公式int Y = ( 66 * R + 129 * G +  25 * B + 128) >> 8;      // 右移8相当于除以256int U = (-38 * R -  74 * G + 112 * B + 128) >> 8;int V = (112 * R -  94 * G -  18 * B + 128) >> 8;// 在输出时加上偏移量(通常 Y: 16-235, U/V: 16-240)或直接根据 Full Range 映射处理yuv_image[i][j][0] = clamp(Y + 16, 0, 255);yuv_image[i][j][1] = clamp(U + 128, 0, 255);yuv_image[i][j][2] = clamp(V + 128, 0, 255);}
}

注释说明:

  • 上述转换公式中权重系数依 BT.601 标准,可根据不同标准(BT.709、BT.2020)调整。
  • “clamp” 用于防止数据超出 0~255 的范围。
  • 在实际运用中还要考虑 UV 通道是否需要交换顺序(例如 NV12 与 NV21 的差异)。

总结

  • 每个模块在 ISP Pipeline 中均承担着特定的任务,从基础的坏点修复、黑电平校正,到颜色调整、图像增强与格式转换。
  • 所有步骤可以串联形成一条完整的图像处理流水线,每步均可对输出图像质量产生显著影响。
  • 上述伪代码均为简化示例,实际代码中会涉及更复杂的边界处理、动态参数调整以及硬件寄存器的配置。

希望这份详细的解释和代码示例能帮助初学者从理论和实战两个角度掌握 ISP Pipeline 的各个算法原理及其实现方式。如果需要更具体的平台驱动代码或针对特定芯片(如 MTK67/68)的寄存器配置细节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rust开发】Rust快速入门,开发出Rust的第一个Hello World

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Google Chrome下载受限制的解决方案【方法指南】

在国内使用网络时&#xff0c;部分用户在尝试访问Google Chrome官网下载谷歌浏览器时&#xff0c;常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序&#xff0c;用户需要通过一些…

使用 new EventSource 实现前端实时通信

示例&#xff1a; eventSource单向通信 1. 什么是 EventSource&#xff1f; EventSource 是浏览器提供的一种实现服务器推送&#xff08;Server-Sent Events&#xff0c;简称 SSE&#xff09;功能的 API。它是基于 HTTP 协议的单向通信机制&#xff0c;可以通过服务器将实时数…

Android Input——查找并添加目标窗口(七)

在 Android 输入系统中,InputDispatcher 的核心职责之一是将输入事件正确地传递到目标窗口。上一篇文章我们介绍到 InputDispatcher 事件分发调用到 findFocusedWindowTargetsLocked() 函数查找焦点窗口,并将焦点窗口添加到目标窗口,这里我们继续往下看。 一、获取焦点窗口…

Spring Boot中Spring MVC相关配置的详细描述及表格总结

以下是Spring Boot中Spring MVC相关配置的详细描述及表格总结&#xff1a; Spring MVC 配置项详解 1. 异步请求配置 spring.mvc.async.request-timeout 描述&#xff1a;设置异步请求的超时时间&#xff08;单位&#xff1a;毫秒&#xff09;。默认值&#xff1a;未设置&…

HTTP GET 和 POST 请求有什么区别

HTTP 的 GET 和 POST 请求是两种常见的 HTTP 请求方法&#xff0c;它们有不同的特点和应用场景。以下是它们的主要区别&#xff1a; 1. 用途 GET&#xff1a;用于从服务器获取数据或资源。GET 请求会附带查询参数在 URL 中&#xff0c;通常用于请求数据&#xff0c;如加载网页…

从入门到精通【MySQL】 联合查询

文章目录 &#x1f4d5;摘要&#x1f4d5;1. 多表联合查询时MySQL内部原理✏️1.1 实例&#xff1a;一个完整的联合查询过程 &#x1f4d5;2. 内连接&#x1f4d5;3. 外连接&#x1f4d5;4. 自连接&#x1f4d5;5. 子查询✏️5.1 单行子查询✏️5.2 多行子查询✏️5.3 多列子查…

高可用之战:Redis Sentinal(哨兵模式)

参考&#xff1a;Redis系列24&#xff1a;Redis使用规范 - Hello-Brand - 博客园 1 背景 在我们的《Redis高可用之战&#xff1a;主从架构》篇章中&#xff0c;介绍了Redis的主从架构模式&#xff0c;可以有效的提升Redis服务的可用性&#xff0c;减少甚至避免Redis服务发生完…

加密≠安全:文件夹密码遗忘背后的数据丢失风险与应对

在数字化时代&#xff0c;保护个人隐私和数据安全变得尤为重要。许多人选择对重要文件夹进行加密&#xff0c;以防止未经授权的访问。然而&#xff0c;一个常见且令人头疼的问题也随之而来——文件夹加密密码遗忘。当你突然发现自己无法访问那些加密的文件夹时&#xff0c;那种…

WPS宏开发手册——附录

目录 系列文章7、附录 系列文章 使用、工程、模块介绍 JSA语法 JSA语法练习题 Excel常用Api Excel实战 常见问题 附录 7、附录 颜色序列&#xff1a;在excel中设置颜色&#xff0c;只能设置颜色序号&#xff0c;不能直接设置rgb颜色 1、黑色 (Black)…

C++基础精讲-02

文章目录 1.C/C申请、释放堆空间的方式对比1.1C语言申请、释放堆空间1.2C申请、释放堆空间1.2.1 new表达式申请数组空间 1.3回收空间时的注意事项1.4malloc/free 和 new/delete 的区别 2.引用2.1 引用的概念2.2 引用的本质2.3 引用与指针的联系与区别2.4 引用的使用场景2.4.1 引…

Spring Boot MongoDB 分页工具类封装 (新手指南)

Spring Boot MongoDB 分页工具类封装 (新手指南) 目录 引言&#xff1a;为何需要分页工具类&#xff1f;工具类一&#xff1a;PaginationUtils - 简化 Pageable 创建 设计目标代码实现 (PaginationUtils.java)如何使用 PaginationUtils 工具类二&#xff1a;PageResponse<…

MyBatis的缓存、逆向工程、使用PageHelper、使用PageHelper

一、MyBatis的缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率。 mybatis的缓存&#xff1a;将select语句的查询结果放到缓存&#xff08;内存&#xff09;当中&#xff0c;下一次还是这条select语句的话&#xff0c;直…

java中的JNI调用c库

1. 简单demo 如果是在某个项目中有包名就需要自己找ai问问去改写下cmd命令去编译执行等 java文件&#xff08;HelloJNI.java&#xff09; public class HelloJNI {// 声明 native 方法public native void sayHello();// 加载本地库static {System.loadLibrary("hello&quo…

人工智能:GPT技术应用与未来展望

GPT(Generative Pre-trained Transformer)作为自然语言处理领域的代表性技术,近年来在各行业的实际应用中展现出广泛潜力。结合其技术特性与行业需求,以下是GPT的主要应用场景、案例分析及未来挑战的总结: 一、核心应用领域与案例 文本生成与内容创作 自动化内容生产:GPT…

前端笔记-ECMAScript语法概览

更多详细可以查看1.1 ES6 教程 | 菜鸟教程 这里我将大概记录ES与JS大概不一样的部分&#xff0c;方便联合记忆。 历史与关系 ECMAScript&#xff1a;是一种由 Ecma 国际组织制定的脚本语言规范&#xff0c;它是 JavaScript 的标准化版本。ECMAScript 为 JavaScript 提供了语…

操作主机的管理

1.在AD林范围内&#xff0c;有哪几个操作主机角色 架构主机&#xff08;Schema Master&#xff09; 功能&#xff1a;负责整个AD林中所有对象和属性的定义&#xff0c;是唯一可以更新目录架构的DC。架构更新会从架构主机复制到目录林中的所有其他域控制器。 作用范围&#xf…

【Linux】网络编程

目录 端口号 网络字节序 socket编程 接口 sockaddr结构 udp网络程序 创建套接字 绑定 接收 发送 客户端需要绑定吗&#xff1f; 客户端执行方法 本地环回地址 终端文件 代码 tcp网络程序 SOCK_STREAM 监听 查询网络信息 获取新连接 地址转换函数 客户端绑…

Go 语言中的select是做什么的

Go 语言中的 select 是做什么的 在 Go 语言中&#xff0c;select 语句是用于处理多个通道&#xff08;channel&#xff09;操作的一种控制结构。它类似于 switch 语句&#xff0c;但专门用于并发编程&#xff0c;允许 Goroutine 在多个通道上等待操作&#xff08;发送或接收&a…

智慧班牌系统解决方案,SaaS智慧电子班牌云平台

智慧班牌系统解决方案 系统概述 智慧班牌是智慧校园建设不断发展的产物&#xff0c;是教育信息化改革的载体。通过智慧班牌可以高效便捷传递各种知识信息和通知信息、及时反馈课堂信息、实现班级的透明化管理。智慧班牌将学生平安考勤、异常出勤情况及时反馈至家长、老师&…