5月9号开始抛弃C++,尝试用C#,参考资料是《Visual C#图像处理程序设计实例》。
9号到11号一直在摸索,不仅在摸索程序,还在摸索思路。11号上午还在和Dr.Fu的研究
生讨论我课题的具体实现方法,结果最后还是自己摸索出来了一种方法。先不考虑配
准,可见光图像的像素包含R,G,B,A四个数据,希望能够再添加一个数据T,将温度值赋
过去,但对图像的显示不造成仍和影响,只是多存储了这样一个信息。结果想到这样太
困难,且修改了图像的数据结构所以说现在的查看图像的工具肯定都不能打开,要不改
变图像的显示却又存储了其他信息进去不太可能,所以,我打算找改变图像视觉效果最
小的一个因素――Alpha(透明度),用Alpha来存储温度。
下面是我从12号开始的文本log――
下午解决了n多错误,实现了将温度读到alpha通道里保存,可是问题又出现了:alpha
通道是8位二进制数,可是却已int32来存以byte来取,这样不仅所要保存温度的范围有
限制,而且不能有小数。然而我所需要的红外热像的温度值全是精确到小数点后一位。
这个问题很让我困扰。我想将温度值以8位浮点数的形式保存到alpha通道中,调用
color对象的A属性虽然是按无符号数(byte类型)去读,但是肯定可以用程序转换成真
值再显示出来。现在,关键的是:怎样自定义8位浮点数的格式?!
15:55 2007-5-12
自定义一个函数。该函数实现一种算法:将温度值(精度为小数点后一位)转换为一个
0到255之间的整数。且该算法必需可逆。
16:05 2007-5-12
我之前的想法太幼稚了,完全错误 !alpha维仅有8位,那么只能存储2^8=256种信息,
但温度值精确到小数点后一位,就算温度范围为0.0到50.0那也有501种信息,所以8位
的alpha完全不能够胜任存储该范围温度信息的职责。
17:58 2007-5-12
暂时先不管温度范围的事情,继续坚持用alpha通道存储温度的思路,除了保存没有
写,其他的功能大体上都写完了。
1.温度先暂时取整存储,略掉了小数部分;
2.为了方便查看图像,在软件里面打开的图像都显示为不透明,不管原图像是不是含有
透明度(为此我想了一会,最后另建立一个picturebox控件picbox2和原来的重合但z坐
标在其上面,这样才能实现。所有对图像处理的操作全部用picbox1才引用,因为
picbox被picbox2所覆盖,所以看上去图像还是picbox2里的图像,只要保证该图像的不
透明即可;
明天完成保存,关闭,退出,帮助;考虑操作时序逻辑。
21:48 2007-5-13
帮助暂时不写,其他的都搞定了。测试保存的时候发现了一个问题,在打开图像的事件
中必需要声明两个Bitmap对象。一会多加一些注释。
10:53 2007-5-14
傍晚的时候和Dr.付冬梅谈论了一下我的课题,讲了一下我目前所做的工作,说明了缺
点以及困惑的地方,最后互相讨论了半天,改变了一些最初假想的东西,新生出一些东
西(1.大跨度温度非集中分布的转换算法;2.图像自动配准改为图像手动配准;3.加上
对图片新格式的展望),最终得出了论文整体的框架(问题启发式:-))。并且告诉我
如果能做出来很不错,难度值也很高,是个很好的论文^_^。
21:19 2007-5-14
马上想到大跨度温度非集中分布的转化其实还不如直接历遍温度文本文件,将所有像素
的温度值按从小到大排序,只要总的温度数小于256,那么就可以建立对应关系来存取
温度信息到alpha通道中。因为如果要用算法来解决大跨度温度非集中分布的问题,那
么肯定要找到一些相距很远的温度区间,所以其实还是要对温度文本进行历遍。所以,
还不如直接历遍温度文本文件,对所有温度值排序,建立映射关系即可。
21:28 2007-5-14
晚上考虑了温度变换的问题,需要历遍温度矩阵中的所有温度。只要总的不同的温度的
数量小于256,就可以存储到alpha通道中。具体来说就是对矩阵元素从小到大排序,将
最大的温度值对应255,第二大的温度值对应254,依次对应下去。再据此将矩阵中的每
个温度值都变换成新的无符号整数值即可。开始以为程序算法很好实现 ,最后琢磨半
天,暂时想到一种(但运算量超级大-_-!肯定得改):
1.读取(1,1)的值;
2.读取(1,2)的值;
3.比较(1,1)和(1,2)的值;
4.将较大值对应的坐标保存到变量 Max中,将较小值对应的坐标保存到变量Min中;
5.读取(1,3)的值
和变量Max比较:
如果(1,3)的值较大,那么将坐标(1,3)存储到变量Max中
如果(1,3)的值较小,变量Max的值不变
和变量Min比较:
如果(1,3)的值较小,那么将坐标(1,3)存储到变量Min中
如果(1,3)的值较大,变量Min的值不变;
6.读取(1,4)的值,同上,分别和变量Max、变量Min比较,按上一步的方案操作;
7.如此历遍所有的值之后,变量Max里面存储的就是数组中的最大值的坐标,变量Min里
面存储的就是数组中的最小值的坐标。因此,对剩下的数再做同样的算法历遍,找到次
大值和次小值的对应坐标,从而排序所有的温度值。
(打完字发现这个算法n多问题,且想到了新的方法,一会再说)
正准备将这个算法动手实现的时候,看到了我之前写的读取温度文本存储到alpha通道
的程序,突然觉得似乎那步将温度文本读到一个矩阵中的操作是多余的,完全可以省去
这一步,直接用一维数组两层嵌套循环赋值给每个像素的alpha维。于是马上动手改,
结果成功,o(∩_∩)o...哈哈,这下省去了至少一半的运算量和文件操作,速度快了好
多!
22:32 2007-5-15
刚刚写的那个排序算法是实在是bug一堆:首先没考虑等值问题; 其次,需要定义的变
量太多;最重大的问题是运算量太大了!所以肯定不行,Kill it!先回宿舍睡觉去,
躺在床上想想。:-)
23:10 2007-5-15
决定用冒泡算法解决问题,其实我自己的想法就是冒泡算法,虽然运算量很大,但是简
单!先实现再说^_^
10:00 2007-5-16
Dear God, can you hear me?!
Subscribe to:
Post Comments (Atom)

No comments:
Post a Comment