图像增加摩尔纹

在图像上添加摩尔纹,模仿手机拍摄LCD屏幕出现的摩尔纹,例如在下图添加摩尔纹
原图:
原图

  1. 模仿LCD屏幕显示的图像
    Resample the input RGB image into a mosaic of RGB subpixels (modeled as 9 pixels with [K, K, K; R, G, B; R, G, B], where K stands for black) to simulate the image displayed on the LCD. Note that this step causes the final moire image to be darker.
    在这里插入图片描述
  • 图像长宽会增大3倍
  • 图像会变暗
import numpy as np
def RGB2mosaicRGB(img, k=0):
    '''
    img: RGB, numpy
    k: int 0-255  The smaller, the darker
    return:
        mosaic:
    step1:
    Resample the input RGB image into a mosaic of RGB subpixels 
    (modeled as 9 pixels with [K, K, K; R, G, B; R, G, B], where 
    K stands for black) to simulate the image displayed on the LCD. 
    Note that this step causes the final moire image to be darker.
    '''
    h, w, c = img.shape
    scale = 3
    h_, w_ = int(h*scale), int(w*scale)
    mosaic = np.ones((h_, w_, c), np.uint8) * k
    for i in range(h):
        for j in range(w):
            mosaic[i*scale+1, j*scale, 0] = img[i, j, 0]
            mosaic[i*scale+1, j*scale+1, 1] = img[i, j, 1]
            mosaic[i*scale+1, j*scale+2, 2] = img[i, j, 2]
        mosaic[i*scale+2, :, :] = mosaic[i*scale+1, :, :]

    return mosaic
  1. 透视投影变换,模仿相机在不同角度、不同距离拍摄的图像
    在这里插入图片描述
def project_transform(img, r=0.2):
    '''
    img: mosaic image, RGB, numpy
    r: ratio
    step2:
    Apply a random projective transformation on the im- age to simulate different 
    relative positions and orienta- tions of the display and camera, and apply 3×3 
    Gaussian filter. To model the random projective transformation, four image corners 
    were randomly sampled (us- ing a uniform distribution) within a radius of 0.2 
    times of the image size
    '''
    h, w, c = img.shape
    src = np.array([[0, 0], [w, 0], [w, h], [0, h]]).astype(np.float32)
    dst = np.array([[np.random.randint(0, r*w), np.random.randint(0, r*h)], 
                    [np.random.randint(w-r*w, w), np.random.randint(0, r*h)], 
                    [np.random.randint(w-r*w, w), np.random.randint(h-r*h, h)], 
                    [np.random.randint(0, r*w), np.random.randint(h-r*h, h)]]).astype(np.float32)
    M = cv2.getPerspectiveTransform(src, dst)
    img = cv2.warpPerspective(img, M, (w, h)) 

    img = cv2.GaussianBlur(img, (3, 3), 0)

    return img
  1. Resample the image using Bayer CFA to simulate the RAW data, and add Gaussian noise to simulate sensor noise.
  2. Apply a simple ISP pipeline including demosaicing (bilinear interpolation) and denoising (standard de- noising function provided by OpenCV).
  3. Compress the image using JPEG compression to simu- late the compression noise, align the clean image with the moire image, and crop out the image pair.

3、4、5是为了模仿相机拍摄过程,拍摄、存储、压缩等带来的噪声,这里忽略

参考文献

Yuan S , Timofte R , Slabaugh G , et al. AIM 2019 Challenge on Image Demoireing: Dataset and Study[J]. 2019.
Liu B , Shu X , Wu X . Demoir’eing of Camera-Captured Screen Images Using Deep Convolutional Neural Network[J]. 2018.

<think>好的,我现在需要在Unity中解决摩尔问题。首先,我得先理解摩尔是什么。根据用户提供的引用,摩尔是由于两个周期性图案(比如点阵)相互干扰产生的,常见于图像复制或显示过程中。在Unity中,这可能发生在摄像机拍摄带有重复细节的理或网格时,比如远处的栅栏、条等。 用户提到的问题是在Unity中出现摩尔,想要避免或修复。我需要回忆一下常见的解决方法。首先想到的是抗锯齿技术,因为锯齿边缘可能会引发摩尔。Unity中有多种抗锯齿选项,比如MSAA、FXAA、TAA,可能这些方法能有所帮助。不过具体应该用哪一种呢?可能需要进一步分析。 然后是理过滤。如果理的采样方式不当,比如使用点过滤(Point Filtering)在低分辨率下,可能导致锯齿和摩尔。改用双线性或各向异性过滤应该能平滑理,减少高频成分的干扰,从而减少摩尔。这点应该有效。 接下来是材质和着色器的调整。比如,使用Mipmap可以让远处的理使用更低分辨率的版本,减少细节的冲突。另外,可能调整材质的各项异性设置,或者添加一些模糊效果来降低高频细节。 摄像机的设置也很重要。比如,调整抗锯齿设置,或者改变摄像机的采样方式。也许开启多重采样抗锯齿(MSAA)会有帮助。另外,摄像机的分辨率设置是否合适?如果目标平台的分辨率较低,可能需要更高的抗锯齿级别。 还有后处理方面。Unity的Post Processing栈中有抗锯齿选项,比如FXAA或TAA,这些后处理效果可能在渲染的最后阶段减少锯齿和摩尔。需要确保这些设置已经启用并调整到合适的强度。 另外,用户可能需要检查理的导入设置。确保理的压缩格式和过滤模式正确,避免因为压缩产生的伪影加剧摩尔。比如,使用高质量的理压缩,或者调整理的最大尺寸,避免理在远处变得过于密集。 还有一个可能的方面是使用屏幕空间效果,比如轻微的模糊或锐化,来平衡高频和低频成分。不过需要小心处理,避免过度模糊影响画质。 总结下来,可能的解决步骤包括:启用抗锯齿(MSAA或FXAA),调整理过滤为各向异性,使用Mipmap,检查材质设置,调整摄像机参数,使用后处理抗锯齿,以及优化理导入设置。可能需要综合应用这些方法才能有效减少摩尔。 不过,我需要验证这些方法是否正确。比如,抗锯齿确实能减少高频锯齿,从而降低摩尔的可能性。各向异性过滤能改善理在倾斜角度的显示效果,避免采样错误。Mipmap的合理使用可以防止远处理的细节过于密集,减少与屏幕像素的干涉。这些都是常见的图形优化手段,应该对摩尔有帮助。 另外,用户提到的引用中,摩尔产生的原因是两个点阵的冲突。因此,在Unity中,可能需要确保渲染时的采样频率与显示器的点阵不会产生干涉。这可能涉及到动态调整分辨率或使用更高分辨率的渲染目标,然后进行下采样,类似于超采样抗锯齿(SSAA)。不过SSAA的性能消耗较大,可能不适合所有项目。 还有可能需要调整摄像机的投影参数,比如视场角(FOV),避免捕捉到高频重复的图案。或者在场景设计时,避免使用过于规律的重复理,尤其是在远处。这可能涉及到美术资源的调整,而不仅仅是技术设置。 总之,解决Unity中的摩尔问题需要多方面的调整,从抗锯齿、理过滤、材质设置到摄像机参数,甚至美术资源的优化。可能需要逐步尝试不同的方法,找到最适合项目需求的解决方案。</think>在Unity中解决摩尔问题需要从图形渲染管线、材质设置和后期处理等多方面进行调整。以下是具体解决方案: ### 一、启用抗锯齿技术 1. **MSAA(多重采样抗锯齿)** 在项目设置的`Quality`选项中启用MSAA(建议4x或8x),通过多重采样减少几何边缘的锯齿,从而降低高频干涉产生摩尔的可能性[^1]。 2. **后处理抗锯齿** 使用Unity的Post Processing Stack启用: - **FXAA(快速近似抗锯齿)**:快速处理屏幕空间锯齿 - **TAA(时间抗锯齿)**:通过帧累积减少动态场景的闪烁 ### 二、优化理设置 1. **理过滤模式** 将理的`Filter Mode`从`Point`改为`Bilinear`或`Trilinear`,并启用各向异性过滤: ```csharp TextureImporter textureImporter = AssetImporter.GetAtPath(texturePath) as TextureImporter; textureImporter.filterMode = FilterMode.Trilinear; textureImporter.anisoLevel = 4; ``` 2. **强制生成Mipmap** 在理导入设置中勾选`Generate Mip Maps`,确保远距离物体使用低分辨率理版本: $$ \text{Mip Level} = \log_2(\frac{\text{原始分辨率}}{\text{显示分辨率}}) $$ ### 三、摄像机参数调整 1. **动态分辨率缩放** 启用`Dynamic Resolution`(URP/HDRP管线支持),自动调整渲染分辨率: ```csharp // URP设置示例 UniversalRenderPipelineAsset urpAsset = GraphicsSettings.renderPipelineAsset as UniversalRenderPipelineAsset; urpAsset.upscalingFilter = DynamicResolutionFilter.TAA; ``` 2. **超采样渲染** 将渲染分辨率提升至屏幕物理分辨率的1.5-2倍后降采样,可显著减少空间频率冲突。 ### 四、材质与着色器优化 1. **细节层次控制** 对高频理添加距离渐变控制: ```hlsl half4 frag(v2f i) : SV_Target { float distanceFade = saturate(_Distance / length(i.worldPos - _WorldSpaceCameraPos)); return lerp(_DetailTex.Sample(sampler_DetailTex, i.uv), _BaseTex.Sample(sampler_BaseTex, i.uv), distanceFade); } ``` 2. **法线扰动** 在表面着色器中添加随机噪声扰动,打破规则图案: ```hlsl float3 randomOffset = (frac(sin(dot(i.uv, float2(12.9898,78.233))) * 43758.5453) * 2 - 1) * _NoiseStrength; i.uv += randomOffset; ``` ### 五、场景设计建议 1. 避免使用严格周期重复的理(如间距相等的栅栏) 2. 对高频细节物体增加随机旋转(±5°)和位置偏移 3. 使用程序化生成理替代规则贴图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值