4.5.2.4_浮雕滤镜

4.5.2.4_浮雕滤镜

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>浮雕滤镜</title>
        <style>
            body{
                background: #eee;
            }
            #canvas{
                background: #fff;
                cursor: pointer;
                margin-left: 20px;
                margin-top: 50px;
                box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
                -webkit-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
                -moz-box-shadow: 4px 4px 8px rgba(0,0,0,0.5);
            }
            #controls{
                position: absolute;
                top: 20px;
                left: 50px;
            }
        </style>
    </head>
    <body>
        <div id="controls"><input type="button" id="embossBtn" value="原图" /></div>
        <canvas id="canvas" width="800" height="520"></canvas>
    </body>
    <script>
        var canvas = document.getElementById('canvas');
        var context = canvas.getContext('2d');
        var embossBtn = document.getElementById('embossBtn');

        var image = new Image();
        var embossed = false;

        //初始化
        image.src = 'img/waterfall.jpg';
        image.onload = function(){
            drawOriginalImage();
        }

        //事件
        embossBtn.onclick = function(){
            if(embossed){
                embossBtn.value = '浮雕';
                drawOriginalImage();
                embossed=false;

            }else{
                embossBtn.value = '原图';
                drawEmboss();
                embossed=true;
            }
        }

        //绘制原图
        function drawOriginalImage(){
            context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);
        }
        //绘制浮雕图
        function drawEmboss(){
            var imageData = context.getImageData(0,0,canvas.width,canvas.height);
            var data = imageData.data;
            var width = imageData.width;//设备像素
            var length = data.length;

            for(var i =0;i<length;i++){//遍历每个像素

                //不让超过最后一行
                if(i<length-width*4){ //不包含最后一行

                    //不包含透明度的值
                    if((i+1)%4 !==0){

                        //在每行最后一个像素取左边的邻近像素
                        if((i+4)%(width*4) == 0){//代表每行最后一个像素

                            //给最右边像素重新定rgba
                            data[i] = data[i-4];
                            data[i+1] = data[i-3];
                            data[i+2] = data[i-2];
                            data[i+3] = data[i-1];
                            i+=4; //直接跳到下一个像素

                        }else{ //最终符合条件的,不是最后一行,也不在每行最后一个的像素,且除去了像素集合中为透明度的值

                            data[i] = 255/2 
                                      + 2*data[i] //现有像素
                                      - data[i+4] //下一个像素
                                      - data[i+width*4]; //下一行同一位置像素

                        }

                    }

                }else{ //最后一行,取上一行的像素
                    if((i+1)%4 !== 0){
                        data[i] = data[i -width+4];
                    }
                }
            }
            context.putImageData(imageData,0,0);
        }
        </script>
</html>
<think>嗯,用户想了解浮雕滤镜的类型、效果和图像处理方面的内容。首先,我需要回忆一下常见的浮雕滤镜类型。根据之前看到的引用,浮雕滤镜的实现方法可能有几种同的算法,比如基于傅里叶变换的频域操作,或者空域的卷积核处理。例如,引用3提到OpenCV中的浮雕算法是通过对每个像素进行差分运算加上128的偏移,这样可以产生浮雕效果。还有引用1提到改变k值可以调整光照和凹凸感,这可能属于频域浮雕滤镜的一种变体。 接下来,用户可能想知道同类型的浮雕滤镜具体有哪些效果差异。比如,传统浮雕滤镜可能使用简单的边缘差分,而频域浮雕可能通过调整频率分量来实现更复杂的效果。另外,同软件或库中的实现可能有同的参数调整,比如EmbossEffect在C#中可以调整角度、深度等参数,这会影响最终效果。 然后,我需要考虑浮雕滤镜的应用场景。通常浮雕效果用于艺术处理、图像增强或者作为预处理步骤。比如在数字艺术中,用来给图片添加立体感,或者在计算机视觉中用于边缘检测的预处理。引用1和引用3都提到了同方法的应用实例,可能需要比较这些方法的优缺点。 用户还可能想知道如何选择适合的浮雕滤镜类型。这时候需要分析同算法的原理,比如空域方法计算速度快,适合实时处理,而频域方法可能更灵活但计算量大。此外,同参数对效果的影响也很重要,比如k值、卷积核大小、角度调整等。 最后,要确保回答涵盖用户提到的所有方面:类型、效果、图像处理的具体方法,并引用提供的参考资料来支持每个观点。同时,生成的相关问题需要引导用户进一步探索,比如优化方法、参数调整或应用场景等。</think>### 浮雕滤镜类型、效果及图像处理原理 #### 1. **传统空域浮雕滤镜** 通过**像素差分算法**实现,核心公式为: $$ dst(i,j) = src(i+1,j+1) - src(i-1,j-1) + 128 $$ 该操作通过计算对角像素差异并叠加灰度偏移值(128)生成浮雕效果,处理后需进行**0-255范围裁剪**。此方法计算速度快,适合实时处理[^3]。 #### 2. **频域浮雕滤镜** 基于**傅里叶变换**,通过调整频率分量实现: - 修改频域参数$k$可控制光照角度与凹凸深度 - 高频分量增强可强化边缘轮廓 - 低频分量抑制可减弱背景细节[^1] #### 3. **参数化浮雕滤镜** 在编程实现中(如C#/VB),通过`EmbossEffect`类可调节: ```csharp effect.Angle = 45; // 控制光线投射角度 effect.Depth = 0.8; // 调节浮雕深度 effect.Bias = 30; // 调整基础亮度偏移 ``` 这种类型支持动态参数调整,适用于交互式图像编辑[^2]。 --- ### 效果对比 | 滤镜类型 | 特征 | 适用场景 | |----------------|-----------------------------|-----------------| | 空域浮雕 | 锐利边缘、高对比度 | 实时视频处理 | | 频域浮雕 | 可调光照模拟、渐变凹凸感 | 艺术特效制作 | | 参数化浮雕 | 多维度效果控制、支持动态调整 | 专业图像编辑软件 | --- ### 图像处理流程示例(OpenCV) ```python import cv2 import numpy as np def emboss_filter(img): kernel = np.array([[-2,-1,0], [-1,1,1], [0,1,2]]) # 自定义卷积核 return cv2.filter2D(img, -1, kernel) + 128 ``` 此代码通过修改卷积核系数可生成同风格的浮雕效果。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值