You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Metal CIKernel采样结果异常,出现条纹噪点求助

问题分析与解决:CIKernel采样相邻像素出现条纹噪点

核心问题是你混淆了纹理坐标和像素坐标:

  • CIKernel中sampler.coord()返回的是归一化纹理坐标,范围是[0, 1](对应图像从左上角到右下角),不是以像素为单位的绝对坐标
  • 直接对坐标加1.0会让x坐标超出有效采样范围,触发采样器的循环/截断行为,最终出现条纹噪点

修正方案

需要先获取纹理的像素尺寸,计算单个像素对应的纹理坐标增量,再用这个增量偏移坐标:

extern "C" float4 Simple(coreimage::sampler s) {
    // 获取纹理的像素宽高
    float2 textureSize = s.size();
    // 计算单个像素在x方向的纹理坐标增量
    float2 pixelStep = float2(1.0 / textureSize.x, 0.0);
    
    float2 current = s.coord();
    float2 anotherCoord = current + pixelStep;
    // 可选:限制坐标在有效范围内,避免边缘采样异常
    anotherCoord = clamp(anotherCoord, float2(0.0), float2(1.0));
    
    float4 sample = s.sample(anotherCoord);
    return sample;
}

补充说明

  • s.size()返回当前采样纹理的实际像素尺寸(比如1920x1080的图像会返回(1920.0, 1080.0))
  • 若要采样上下相邻像素,只需修改pixelStep的y分量,比如float2(0.0, 1.0 / textureSize.y)
  • 即使不限制坐标范围,采样器默认会循环采样超出范围的坐标,这也是你之前看到条纹的原因

内容的提问来源于stack exchange,提问作者jefflovejapan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:12:11