当前位置: 首页 > news >正文

Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器

Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器
原文: Win8 Metro(C#)数字图像处理--2.70修正后的阿尔法滤波器

        /// <summary>
        /// Alpha filter.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <param name="tNumber">One parameter set from 0 to 9.</param>
        /// <returns></returns>
        public static WriteableBitmap AlphaFilterProcess(WriteableBitmap src, int tNumber)修正的阿尔法滤波器
        {
            if (src != null)
            {
                int w = src.PixelWidth;
                int h = src.PixelHeight;
                WriteableBitmap filterImage = new WriteableBitmap(w, h);
                byte[] temp = src.PixelBuffer.ToArray();
                byte[] tempMask = (byte[])temp.Clone();
                double[] Gray = new double[9];
                double gray = 255;
                int tempr = 0, tempb = 0, tempg = 0;
                for (int j = 1; j < h - 1; j++)
                {
                    for (int i = 1; i < w - 1; i++)
                    {
                        tempb = 0;
                        tempg = 0;
                        tempr = 0;
                         
                        int[] B = new int[9] { tempMask[i * 4 + j * w * 4], tempMask[(i - 1) * 4 + (j - 1) * w * 4], tempMask[i * 4 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + j * w * 4], tempMask[(i + 1) * 4 + j * w * 4], tempMask[(i - 1) * 4 + (j + 1) * w * 4], tempMask[i * 4 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + (j + 1) * w * 4] };
                        int[] G = new int[9] { tempMask[i * 4 + 1 + j * w * 4], tempMask[(i - 1) * 4 + 1 + (j - 1) * w * 4], tempMask[i * 4 + 1 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + 1 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + 1 + j * w * 4], tempMask[(i + 1) * 4 + 1 + j * w * 4], tempMask[(i - 1) * 4 + 1 + (j + 1) * w * 4], tempMask[i * 4 + 1 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + 1 + (j + 1) * w * 4] };
                        int[] R = new int[9] { tempMask[i * 4 + 2 + j * w * 4], tempMask[(i - 1) * 4 + 2 + (j - 1) * w * 4], tempMask[i * 4 + 2 + (j - 1) * w * 4], tempMask[(i + 1) * 4 + 2 + (j - 1) * w * 4], tempMask[(i - 1) * 4 + 2 + j * w * 4], tempMask[(i + 1) * 4 + 2 + j * w * 4], tempMask[(i - 1) * 4 + 2 + (j + 1) * w * 4], tempMask[i * 4 + 2 + (j + 1) * w * 4], tempMask[(i + 1) * 4 + 2 + (j + 1) * w * 4] };
                        for (int n = 0; n < 9; n++)
                        {
                            Gray[n] = (double)B[n] * 0.114 + (double)G[n] * 0.587 + (double)R[n] * 0.299;
                        }                                             
                        for (int x = 0; x < 9; x++)
                        {
                            for (int y = x + 1; y < 9; y++)
                            {
                                gray = Gray[x];
                                tempb = B[x];
                                tempg = G[x];
                                tempr = R[x];
                                if (Gray[x] > Gray[y])
                                {
                                    Gray[x] = Gray[y];
                                    Gray[y] = gray;
                                    B[x] = B[y];
                                    G[x] = G[y];
                                    R[x] = R[y];
                                    B[y] = tempb;
                                    G[y] = tempg;
                                    R[y] = tempr;
                                }
                            }
                        }
                        if (tNumber < 0 || tNumber > 8) return null;
                        tNumber = (tNumber % 2 == 0 ? tNumber : tNumber - 1);
                        for (int m = 0; m < (int)(tNumber / 2); m++)
                        {
                            R[m] = 0;
                            G[m] = 0;
                            B[m] = 0;
                            R[8 - m] = 0;
                            G[8 - m] = 0;
                            B[8 - m] = 0;
                        }
                        temp[i * 4 + j * w * 4] = (byte)(B.Sum() / (9 - tNumber));
                        temp[i * 4 + 1 + j * w * 4] = (byte)(G.Sum() / (9 - tNumber));
                        temp[i * 4 + 2 + j * w * 4] = (byte)(R.Sum() / (9 - tNumber));
                    }
                }
                Stream sTemp = filterImage.PixelBuffer.AsStream();
                sTemp.Seek(0, SeekOrigin.Begin);
                sTemp.Write(temp, 0, w * 4 * h);
                return filterImage;
            }
            else
            {
                return null;
            }
        }

posted on 2018-03-13 10:43 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/8554687.html

相关文章:

  • 政务舆情项目服务公司怎么选择的参考详细
  • 动态开启WCF服务
  • 地震灾害话题讨论与舆情舆论信息怎么收集的系统技术方法
  • Monkey原理
  • 舆情指数在哪里可以查到?具体平台与工具参考
  • 单例模式
  • 清博大数据网络舆情监测\控软件功能作用与类似软件有哪些详解
  • 【VNC】Linux环境VNC服务安装、配置与使用
  • 医院片面报舆情信息怎么监测的方法建议
  • JMeter,postman
  • 如何监测舆情?三款网上舆情搜索软件工具参考
  • 如何运用舆情分析研判软件进行舆情信息获取和分析的方法
  • while循环 不使用break 语法 ,声明变量,不等于
  • 网上热议话题产生的舆情信息怎么排查的系统软件方法
  • luogup3834(主席树模板)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 2018一半小结一波
  • Android 架构优化~MVP 架构改造
  • CentOS7 安装JDK
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java多态
  • js作用域和this的理解
  • Magento 1.x 中文订单打印乱码
  • PermissionScope Swift4 兼容问题
  • Promise面试题2实现异步串行执行
  • Spark RDD学习: aggregate函数
  • web标准化(下)
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 关于 Cirru Editor 存储格式
  • 机器学习学习笔记一
  • 近期前端发展计划
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 如何在 Tornado 中实现 Middleware
  • 说说动画卡顿的解决方案
  • 微信小程序实战练习(仿五洲到家微信版)
  • Prometheus VS InfluxDB
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #define与typedef区别
  • #pragam once 和 #ifndef 预编译头
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (二)Linux——Linux常用指令
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十六)串口UART
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)