05tue

乘以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窗口滑动;

构造函数是为了获取

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

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

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

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

指针的灵活带来不稳定性

dispose()

flushcashe()这个不能删,

过关所需技能点:

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

app.config 编译链接生成之后

配置文件,

dll 动态链接库

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

API接口

跨平台,标准C

gdal 路径跟着exe走

类和对象

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

hey man

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

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

B yourself

B YOUESELF

YES THATS RIGHT DEFINITALLY RIGHT

专业程序设计part2的更多相关文章

  1. 专业程序设计part1

    7 专业程序设计 (有多少人在大学里学到了自己真正喜欢的专业??并在此专业上获得了升华??)i== 软件图标下载网址:easyicon 01thu 4邻域 8邻域 D邻域 是啥 像素间的连通性,是转为 ...

  2. 学习 Civil 3D二次开发从哪儿开始?

    1.1 从哪儿开始 对于多数的工程设计人员,不完全具备上节所述的各种条件.对于Civil 3D的应用可能比较熟悉:但对于计算机语言,只限于上学时所学的一点基础知识,步入工作岗位后与计算机语言基本无缘: ...

  3. java和C和C++关系

    java和C以及C++ 直接关联,java继承了C的语法,java的对象模型是从C++改编而来的.java和C以及C++关系之所以重要,下面几个就是原因: ①如果一个程序员熟悉C以及C++语法,那么他 ...

  4. 应用gis笔记

    接口,开发包??我要做一个移动端的,完了之后和5G挂一下钩, web/桌面/移动 C#就是.NET.... 和专业程序设计课程的区别 a kind of boring hope it helpful, ...

  5. 2016-2017-2 《Java程序设计》预备作业2总结

    2016-2017-2 <Java程序设计>预备作业2总结 古希腊学者普罗塔戈说过:「头脑不是一个要被填满的容器,而是一束需要被点燃的火把.」 在对计算机系的学生情况的调查中,我说: 最近 ...

  6. 2016-2017-2 《Java程序设计》预备作业1 总结

    2016-2017-2 <Java程序设计>预备作业1 总结 预备作业01:你期望的师生关系是什么见https://edu.cnblogs.com/campus/besti/2016-20 ...

  7. 积极主动敲代码,使用Junit学习Java程序设计

    积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...

  8. 第一章-第五题(你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?阅读有关软件工程和计算机科学的区别的文章,谈谈你的看法。)--By 侯伟婷

    我所在的本科学校和研究生学校都有计算机科学专业和软件工程专业.具体的教学计划无从得到,所以此情况无从对比,但是我从本科教务处网站找到了计算机科学专业和软件工程专业有关专业方面的课程,现列表如下. 表格 ...

  9. C语言程序设计入门学习五步曲(转发)

    笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的 ...

随机推荐

  1. 114-PHP判断类变量是否相同

    <?php class ren{ //定义人类 } class mao{ //定义人类 } $ren=new ren(); //实例化人类的对象 $ren_a=new ren(); //实例化人 ...

  2. 【转】AutoMapper对象映射

    什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...

  3. 三、ReactJS、jsx、 Component 特性

    reactjs特性: 基于组件(Component)化思考 用 JSX 进行声明式(Declarative)UI 设计 使用 Virtual DOM Component PropType 错误校对机制 ...

  4. NumPy 数组创建

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  5. 学习spring第6天(aop获取目标方法参数)

    关于<aop:around>中的方法,需要第一个参数为ProceedJoinPoint,在方法体中通过该参数调用proceed()才能使目标方法得到调用. 当一个切面中有多个<aop ...

  6. HDU - 4082 Hou Yi's secret

    题意:射箭落在n个点,任取三点可构成一个三角形,问最大的相似三角形集(一组互相相似的三角形)的个数. 分析: 1.若n个点中有相同的点,要去重,题目中说射箭会形成洞,任选三个洞构成三角形,因此射在同一 ...

  7. EUI库 - 快速入口之项目配置

      egretProperties.json exmlRoot  指定exml文件存放根目录,该路径必须为相对路径,目录内只能有exml文件 themes    主题文件数组,配置所有主题文件路径,该 ...

  8. UITextFeild的基本属性

    textField 基本属性   _textField.frame = CGRectMake(0, 0, 200, 50); _textField.delegate = self; _textFiel ...

  9. DevOps专题|基础Agent部署系统

    随着京东云业务规模.管理机器规模的扩大,各类agent也在逐渐增多,如日志agent.监控agent.控制系统agent等.这对agent的部署.升级.状态维护提出了很高的要求,一旦某个全局agent ...

  10. tensorflow笔记2(北大网课实战)

    1.正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标,利用给w加权值,弱化了训练数据的噪声 一般不会正则化b. 2.matplotlib.pyplot 3.搭建模块化的神经网络八股: 前向传播就 ...