• 专业程序设计part2


    05tue

    wps36

    乘以1.0使得int*int!=0

    today:缩放 和计算机图形学关联

    已知:currentdataset

    ask for:两个方向的缩放比例、保存路径、重采样方法(necessary)以输出图像为基准去循环(反算)去取原像素的方法

    把参数传到类里里面:通过类的构造函数(需要接受)/定义一个静态全局变量(用之前赋值、声明)

    变换在buffer中进行、rasterband readraster

    dataset in→dataset out(计算输出)→三层循环(波段循环别忘了)

    provider里已有两个bmp和旋转

    05thu

    裁剪

    “橡皮条技术”(截图一样),动态效果单纯裁剪只需改readraster和writeraster的参数,简单的

    1.空间范围;

    2.band

    规则裁和不规则裁的区别,不规则图像的裁剪先找最小矩形,用shape裁,我们是用像素裁的,(实现用shape矢量数据裁?)

    需求:从空间和波段裁剪所需数据

    已知:currentdataset

    未知:裁剪要求(矩形坐标(大小、位置判断弹出messagebox)、传一维数组确定裁剪波段、(鼠标交互获取、缩略图))、保存路径七个参数

    设计界面→

    四个构造函数、三个鼠标事件函数(橡皮条),

    temp缩略图准备好、current框里的图,用于替换,mouse move 一动就触发,temp画布g上画一个红框,判断谁大谁小(反了),把带红框的temp贴到,重新恢复为不带红框的底图,or效果见imagery

    在类里面添加函数

    窗口依旧是个类,特殊的类

    基于组件、控件的二次开发

    构造函数

    05tue

    妈的不记得上节课干了啥,花一半时间赶进度是什么鬼???

    差一个image,自己补上,

    直方图统计,直观反映图像偏暗或偏亮,处理直方图改进可视化,(均衡化变换)这个图不是显示,联动着还能改图像,envi直方图拉伸,在一个画布上,以出现频率max那条线作为y轴位置,

    直方图均衡化:统计像素个数→计算灰度值累计分布0-1(乘以255(拉伸))→(就是以255为量纲形成新的像素值)

    真他妈神奇,因为灰度0-255本身,每种像素值所占比例其实就是,就是突出主要像素值,赋予新的像素值之后来显示,有对比,道理应该是这么回事,原理你爱理不理

    06thu

            public static bool Balance

                (Bitmap srcBmp, out Bitmap dstBmp)

            {

                if (srcBmp == null)

                {

                    dstBmp = null;

                    return false;

                }

                int[] histogramArrayR = new int[256];//各个灰度级的像素数R

                int[] histogramArrayG = new int[256];//各个灰度级的像素数G

                int[] histogramArrayB = new int[256];//各个灰度级的像素数B

                int[] tempArrayR = new int[256];

                int[] tempArrayG = new int[256];

                int[] tempArrayB = new int[256];

                byte[] pixelMapR = new byte[256];

                byte[] pixelMapG = new byte[256];

                byte[] pixelMapB = new byte[256];

                dstBmp = new Bitmap(srcBmp);

                Rectangle rt = new Rectangle(0, 0, srcBmp.Width, srcBmp.Height);

                BitmapData bmpData = dstBmp.LockBits(rt, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

                unsafe

                {

                    //统计各个灰度级的像素个数

                    for (int i = 0; i < bmpData.Height; i++)

                    {

                        byte* ptr = (byte*)bmpData.Scan0 +

                            i * bmpData.Stride;

                        for (int j = 0; j < bmpData.Width; j++)

                        {

                            histogramArrayB[*(ptr + j * 3)]++;

                            histogramArrayG[*(ptr + j * 3 + 1)]++;

                            histogramArrayR[*(ptr + j * 3 + 2)]++;

                        }

                    }

                    //计算各个灰度级的累计分布函数

                    for (int i = 0; i < 256; i++)

                    {

                        if (i != 0)

                        {

                            tempArrayB[i] = tempArrayB[i - 1] +

                                histogramArrayB[i];

                            tempArrayG[i] = tempArrayG[i - 1] +

                                histogramArrayG[i];

                            tempArrayR[i] = tempArrayR[i - 1] +

                                histogramArrayR[i];

                        }

                        else

                        {

                            tempArrayB[0] = histogramArrayB[0];

                            tempArrayG[0] = histogramArrayG[0];

                            tempArrayR[0] = histogramArrayR[0];

                        }

                        //计算累计概率函数,并将值放缩至0~255范围内

                        pixelMapB[i] = (byte)(255.0 * tempArrayB[i]

                            / (bmpData.Width * bmpData.Height) + 0.5);//加0.5为了四舍五入取整

                        pixelMapG[i] = (byte)(255.0 * tempArrayG[i]

                            / (bmpData.Width * bmpData.Height) + 0.5);

                        pixelMapR[i] = (byte)(255.0 * tempArrayR[i]

                            / (bmpData.Width * bmpData.Height) + 0.5);

                    }

                    //映射转换

                    for (int i = 0; i < bmpData.Height; i++)

                    {

                        byte* ptr = (byte*)bmpData.Scan0 +

                            i * bmpData.Stride;

                        for (int j = 0; j < bmpData.Width; j++)

                        {

                            *(ptr + j * 3) = pixelMapB[*(ptr + j * 3)];

                            *(ptr + j * 3 + 1) = pixelMapG[*(ptr + j * 3 + 1)];

                            *(ptr + j * 3 + 2) = pixelMapR[*(ptr + j * 3 + 2)];

                        }

                    }

                }

                dstBmp.UnlockBits(bmpData);

                return true;

            }

    it seems that 没到靠一己之力写出我完整代码的程度,差多少,差很多,oh my god,,,,,

    07tue

    unsafe

    c#抛弃指针的,

    直方图均衡化的过程:

    原理:基于灰度的累积分布的函数,再概率分布拉伸到0-255,

    已知加载了一幅图像,数据结构冒泡排序法,二分查找法

    通过构造函数传入

    屏幕坐标和数学坐标反过来的,横轴开始画。

    矢量图层里有feature,coordinate(x,y)把屏幕当成画布,根据屏幕像素坐标

    画直线不仅仅是一条条画,而且是在Y轴上一点一点画上去或者是替换,for循环,比大小max替代

    07thu图像滤波平滑&锐化(也算图像增强)

    去雾霾的算法(》》)

    去噪(图像滤波)高斯(every pixel,出现位置特定,噪声值随机 极值)和椒盐(黑白芝麻出现位置随机,值差不多)分乘型噪声和加性噪声,注意:滤波的算法是通用模板,

    均值滤波原理:给待处理的像素定一个模板,有画面边框保留效果

    距离:欧式距离,棋盘距离

    噪声出现是在图像传输或是咋样咋样的时候产生的,

    KNN少数服多数,边界处理k均值先球差,再排序插值,再取平均(插值只用于比较)

    插值带下标

    根据下标取周边像素边框宽度为啥三乘三是1,5乘五是2

    唐渝鹏type def ,把下标和值存到一起

    08tue

    图像变换

    傅里叶变换&PCA变换

    空间域(灰度值)→频率域

    傅里叶:任何连续周期信号可以由一组适当的正弦曲线(不同幅值、频率、相位)组合而成。一段完整的??nonono不可能,数学家很恐怖,拉普拉斯,拉格朗日。。。。。。。。。。。。。。。。正弦曲线无法组成带有棱角的曲线,时间域、空间域、频率域

    以时间为参考,以另一种参考来观察,世界永恒不变,music,声音由震动产生随时间变动,乐谱不动,得出结论:在时间域是动态的,在频率域上是静止的,

    贯穿整个空间域和

    专业老师是网上大牛段子的搬运工

    先在纸上画一个sin(x),不一定标准,意思差不多就行。不是很难吧。

    好,接下去画一个sin(3x)+sin(5x)的图形。

    别说标准不标准了,曲线什么时候上升什么时候下降你都不一定画的对吧?

    好,画不出来不要紧,我把sin(3x)+sin(5x)的曲线给你,但是前提是你不知道这个曲线的方程式,现在需要你把sin(5x)给我从图里拿出去,看看剩下的是什么。这基本是不可能做到的。

    但是在频域呢?则简单的很,无非就是几条竖线而已。

    所以很多在时域看似不可能做到的数学操作,在频域相反很容易。这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。

    再说一个更重要,但是稍微复杂一点的用途——求解微分方程。(这段有点难度,看不懂的可以直接跳过这段)微分方程的重要性不用我过多介绍了。各行各业都用的到。但是求解微分方程却是一件相当麻烦的事情。因为除了要计算加减乘除,还要计算微分积分。而傅里叶变换则可以让微分和积分在频域中变为乘法和除法,大学数学瞬间变小学算术有没有。

    傅里叶分析当然还有其他更重要的用途,我们随着讲随着提。

    08thu

    laoshishuodishizhoule

    datasetin 获取波段先

    把波段读到一个byte[]里,

    用这个byte[]参数进行二维傅里叶变换

    再生成相位、幅度、

    生成bmp贴进去

            /// <summary>

            /// 根据图像的波段,获取二维傅里叶变换后的幅度图像

            /// </summary>

            /// <param name="ds">输入图像</param>

            /// <param name="bandIndex">波段序号</param>

            /// <returns>该波段在频率域的幅度图像</returns>

            private Bitmap getAmplitudeBitmap(Dataset ds, int bandIndex)

            {

                //声明图像数据缓冲区,大小为图像 width * height

                //调用GetRasterBand获取第bandIndex波段

                //读取波段数据到缓冲区

                //声明FT_Complex类型的虚数数组,大小为图像 width * height

                //调用二维快速傅里叶变换,需要进行坐标位移。传入图像缓冲区,返回傅里叶变换后的虚数数组

                //声明临时数组

                //对虚数数组进行变量变换,并取幅度系数,赋值给临时数组

                //对临时数组进行灰度级拉伸

                //找到最大值和最小值

                //得到比例系数,将临时数组拉伸到0-255

                //创建Bitmap,大小为图像 width * height,将拉伸后的值填入Pixel

                //返回创建Bitmap

            }

    11tue

    主成分滤波(PCA)

    掩码图像如何获得??????????????

    11thu

    遥感图像分类

    监督分类/非监督分类/分类后处理/

    监督分类步骤:

    1.训练样本的选择;

    2.选择合适的分类算法;

    计算像元与类中心的距离,

    3.分类评判;(碎斑合并,膨胀腐蚀)

    界面设计:有图,缺样本(交互)、阈值

    监督分类算法:最小距离判别/概率判别函数/平行六边体判别法(先比先得)/最大似然法/

    优缺点:可以自行决定分类的类别、控制样本的选择、但具有主观性,与分类精度挂钩,

    在picturebox下贴一个panel,设置属性autoscroll,picturebox属性设为autosize,这样能实现图片窗口大小随实际图片大小变化,并且能自动出现滚条,在panel窗口滑动;

    wps37

    构造函数是为了获取

    对显示出来的图像进行分类,而不是对所有的七个波段进行分类

    频率域滤波中的频率方位滤波

    c#垃圾回收机制,指针没被销毁没被释放,内存被占用,要么访问冲突要么内存泄漏,

    被占用的其情况下,给内存定义一个周期,定期释放,提高代码稳定性,缺点是

    指针的灵活带来不稳定性

    dispose()

    flushcashe()这个不能删,

    过关所需技能点:

    能新建项目、能正确引用gdal库、能分析题目,拆分成常规处理步骤、将处理步骤转化为代码、调试

    app.config 编译链接生成之后

    配置文件,

    dll 动态链接库

    Java:jr包jdk /jre 开发包/运行环境 跨平台

    API接口

    跨平台,标准C

    gdal 路径跟着exe走

    wps38

    类和对象

    一个类包含成员属性和成员函数

    hey man

    你的图像增强、图像变换、图像分类都有问题,work out all bugs

    研究主题到底是什么??是地表温度和植被覆盖度的关系研究,什么关系呢??也不是定量,

    B yourself

    B YOUESELF

    YES THATS RIGHT DEFINITALLY RIGHT

  • 相关阅读:
    设计模式-Note9-行为变化类
    设计模式-Note8-数据结构类
    设计模式-Note7-状态变化类
    设计模式-Note6-接口隔离类
    设计模式--Note5--对象性能类
    设计模式--Note4--对象创建类
    设计模式--Note3--单一职责类
    设计模式--Note2--组件协作类
    V$ACCESS 查询结果慢的解决方法
    openstack numa详解(命令使用篇)
  • 原文地址:https://www.cnblogs.com/heikejingxiao/p/11269411.html
Copyright © 2020-2023  润新知