00:01
好了啊,嗯,刚才呢,讲了一部分什么呢?算是对于叫做图像的认识,对吧?啊,就是说我们对于对于最起码来说,对于整个的这个图片来说啊,它是由相素点构成的啊,一行一列,以及每一个点上还有RGB,大家对这对这几个呢,应该还比较熟悉了一下是吧,特别是我们刚才把RGB也给全部拿出来了一下,对吧,就熟悉,那么第二个我们来说的话呢。就是我们的图像的处理呢,往往离不开谁呢?往往离不开的东西就是什么,就第一个就是图像的采集,就是采集过来到底是什么,比如我们摄像头啊,或者HD mmi啊,或者USB啊,或者啊给咱们信息,但是无论他怎么给咱们,对于咱们的都是什么,都是一些像素点,对吧,这是第一个,第二个什么呢?也离不开谁呢?也离不开叫做图像的什么呢?缓存,那么我们把图像都缓存到哪去了呢?缓到哪了?
01:03
其实都还到我们所谓的SDMM或者是DDR里边去了。啊,都缓存到SR或者DDR里边去了,那这三个输出呢,哎,输出的时候我们有好几种输出,第一种是直接显示,比如说用,比如说用什么VGA。直接就显示到屏幕上了,那么还有HDMI,我们就可以显示到屏幕上,对吧?当然我们可以通过以太网直接发出去,让别人去做处理,再做显示也都可以啊,离不开这样的一些东西啊,所以大家对这个要有一定的了解好了,那么下边的话我们来讲。啊,这算是我们啊,进入到我们这当中的第二部分啊,第二部分什么呢?就是说我们学习一个比较简单的东西,什么简单东西呢,我们在这啊,同样的用它啊,我们来再新建个脚本,然后这个脚本的话呢,我们给它一个名字啊,叫什么名字呢?我们叫做RGB twog啊叫RGB转灰度啊。
02:00
这是我们要学的第二部分内容啊,叫RGB转灰度啊,那么呃,我们为什么要把RGB转灰度呢?其实什么叫灰度呢?大家家里就看到什么黑白照片。啊,什么黑白电视,实大家说是黑白照片,黑白电视,其实那个是黑白的吗?告诉你不是啊,真正的那个名字应该叫什么呢?应该叫做灰度或者做亮度,叫灰度电视,或者叫什么叫亮度电视。啊,那么下边的话呢,我们就来讲这样一点啊,如何把RGB的转成灰度图片。啊,比如我们外部的,比如我们摄像头采集过来信息是RGB的,那么我们如何把RGB的图片转成什么,转成灰度的,那么有人会想,你为什么要转成灰度的呢?啊,你为什么要转成灰度,转成亮度呢?给大家这样来说一下啊,咱们的很多的处理的算法,其实什么呢?其实都是根据于什么,其实都是根据于灰度值去做的一些处理。
03:12
啊,很多地方都是根据于灰度值做的处理啊,那么我们这一次图像处理的过程当中的话呢,我们所讲解的东西啊,我们可以认为基本上全部都是什么呢?全部都是针对于一张图片的灰度值啊,或者叫亮度值做的一些算法处理啊,当然了这些算法也可以同时的去应用到RGB里边去,它的一些效果怎么样,到时候大家也可以自己去做一些评判啊,这都可以啊,那么其他的算法我们就不来研究了,大家可以自己去研究去,那么我们通过RGB转灰度这样一件事,我们带大家干什么呢?大家熟悉一下什么呢?我们熟悉一下我们所谓的叫做MATLAB以及ipg联合验证开发的这样一套思路啊,这套思路呢,非常简单啊,也非常简单啊,也非常容易啊,当然了啊,你要认认认真真的啊去听啊,首先第一件事儿呢,RGB如何能转成。
04:12
灰度呢?啊,RGB如何能转成灰度呢?首先在这我们先做一件事啊,我先把中间值都给清除了啊,叫clear,好,那么RGB如何能转成灰度呢?首先要做这样第一件事,叫pic_regb等于MR,首先你要把这一幅图片干什么呢?读进来对吧,也就是一点。接PG好,第二件事呢,我们要把它显示出来,最起码我要先看一看嘛,对不对,好RGB好,那么下边的话呢,我们来想一下,我们如何把灰度转成啊,如何把这个RGB图像转成灰度呢。
05:04
啊,如果把RGB转成灰度呢,那么对于我们来说的话呢,MATLAB给咱们提供了一个什么呢?提供了一个它所谓的叫做这个函数,或者说就是它的一个工具啊什么呢,是这样的啊,我们比如叫pic_GRY这是我自己写的啊等于什么呢?叫RGB two GR啊,这是它的一个。函数,这个函数的意思就是把RGB转成灰度值的一个函数,那么转谁呢?我们转的是pic的RGB,就这一件事,它就可可以干什么呢?它就可以把这个的RGB图像转成什么呢?转成了灰度图像啊,转成了灰度以后呢,我们来看一下,叫pic,或者叫做f Fi啊,叫fire。显示PA_GRY好,我们来运行一下啊,首先呢,它会干什么呢?它会显示出来一张原图的彩色啊,刚才是不是忘了把指甲图给关了。
06:12
啊,首先它会显示出一个原图的彩色,哎,这标错了是吧。RGB two。嗯。第四行这一行是哪儿写错了吗?RGB two。灰度啊,是这么做的也没错呀。是不是我这个写错了呀。啊对对对对对啊,那是应该是这个原因啊,就是我自己写了一个名字,和这个名字冲突了。啊,就是我自己定义的名字和人家官方函数冲突了,所以呢就做不了了,那这样我们重新改个名字。我们把我的名字改一下。我说呢,怎么。
07:03
这是我们自己的,我们加个好吧。好了,然后呢,我们再来运行一下啊。我们可以在这前面加一句话,永远的加一句话啊,Clear是什么意思呢?C就是这个CRC什么意思呢?CRC是把下边的所有的命令好像都清除了,Clear的意思是把所有的中间过程都给清除了啊,中间变量都清除了啊。明星。好。啊,这就是一张啊,我们所谓的呃原图,这就是一张对应的灰度图啊,就变成黑白了是吧?变成黑白的颜色了啊,主要是我这张图在拍的时候呢,可能也就是说中间的彩色分量可能没有想象那么大,所以大家看着可能就不太的不太清楚是吧,大家到时候也可以自己用手机拿你们手机上一幅图片,那幅图片可能彩色分量比较多的,可能看得比较清楚一些,对吧,这就是一张灰度图啊好了,那么当我们有了这样的灰度图以后,有人说。
08:25
那这个灰度图到底能干嘛呀?好了,那么先比如说它干嘛,刚才我说了它有很,它可以做很多事情是吧?先不管它干嘛,首先我们再来对灰度图做个认识,灰度图做什么认识,大家可以来看一下,这是不是PI cgy啊,PI cgy的话呢,我们可以来看一下它是不是变成了6000乘8000,还有乘三吗?还有乘三吗?没了,它只剩什么了?它只剩了一个八位值了,那么就意味什么,意味着说在MATLAB当中它默认是什么?它默认是把这个灰度值分成了最亮到最暗,分成了256份,一共是无符号的八位嘛,对吧?有了这样一个叫做灰度的图片啊,灰度图片,那么它就不分RGB了,只有什么行列是多少?
09:17
是不是哎,灰度值啊,这是它的一个灰度值,好了,那么有了这个灰度值以后呢,我们可以做这样一件事啊,比如说举个例子啊,得到灰度值以后,我们可以让大家去玩一些比较好玩的一些事情啊,首先第一个东西是什么呢?因为是灰度值,对吧,我们可以把灰度值反显回来。什么叫灰度值反显呢?举个例子,就是刚才最暗的变成最亮,刚才最亮的变成最暗,这个怎么算?啊,要是取反,那肯定不是,你可这样想,刚才最亮的是255,对吧,变成最暗的就是零,那刚才如果次亮一点呢,254呢。
10:06
它是不是应该变成。变成它总不能变成也变成最暗的吧,它该变什么?它变成稍微暗一点的,所以变成了一对吧,所以它应该是它们两个值应该加起来等于255,说到底的是不是应该是255减去那个值啊,对吧?所以那怎么做呢?所以我们可以这样来做一下,比如说我们来写一个叫做pic_一啊,注意在这我就不起名字,它是一个灰度的一个反显值,听懂了吧,那么它等于pic_GRY刚才大家已经见过了是吧?我首先应该先给它附一个大小的值,让他能够知道是吧,要不然的话那会算量很慢,对吧?啊,我们再放循环。循环I等于一到6000N for循环阶等于一到8000N,然后呢,我们来写一个叫做pic_一到I逗号J应该等于什么?
11:07
它是不是应该等于的是uiu nt8,然后呢,应该是255减去PCG的I逗号接。来想一下是不是它是不是应该等于的,是有人说为什么你前面永远加了强转的,因为很简单啊,我加完强转之后,就为了确保这个数组所得到的值都是这个类型的而已啊,其实你会认为就是255减去那个PCG的I逗号G嘛,对吧?好了,然后呢,我们再来fire,然后呢是P强化线一,也就是说我们现在做了这样一件事,啥事呢?就是一个彩色图片,然后把它变成灰度的,然后又把灰度干什么,又把黑,又把灰度做了一个什么,做了一个类似于的反显,是吧?好,我来预选一下。
12:09
当然了,这个反显我们没有做什么,我们没有用什么,我们没有去用这个所谓的函数功能是吧,我们是自己写了,其实这也是告诉大家干什么呢,告诉大家这样一件事,什么事呢,就是说对于我们来说,对我们来干什么呢?就对于我们来说的话呢,我们可能会知道啊,知道什么呢,就是说以后我们再去做任何函数的时候。我尽量的干什么呢?我先用函数库,后边再用的时候呢,我就不用函数库了,我用什么我就自己写,比如说为什么要自己写呢?因为很简单,函数库能实现这个功能,但是你知道它怎么实现的吗?你不知道,你不知道它怎么实现,就意味着什么,就意味着一会儿你用IP来实现它的功能的时候,你怎么实现啊。你是不是就不知道了,所以我们最好的方法什么?最好的方法就是我们不用你的所有的东西,我开始自己去写,比如减多少加多少我自己知道啊,然后呢,我在ipd里写,是不是已经知道了,好了,那大家来看,接着来看这是一张图,这是一张图。
13:16
那么在这样的一种反显的图片当中,大家可能会知道这样一件事情,什么事情就是在这儿啊,因为咱们是图像的处理的这样一些基础的课程啊,所以我们给大家这样来说,就是说比如像前面这张图是一张灰度图,后边这个图呢,也是一张灰度图,但是他俩之间经过了一个什么呢?经过了一个反写,那么经过反写之后,大家来看一下这样事,是不是你会突然觉得这个前面这张图呢,好像感觉挺正常的,没有什么感觉,对吧?但是你会看后边这张图,你瞬间就会觉得他好像有某些信息凸显出来了,对吧。就比如说这个人这个脑袋上的头发,这头影特别清楚是吧?好了,那么我们这样来想一件事啊,就是说呃,在实际应用当中有没有应用呢?举个例子啊,比如说大家腿折了是吧,骨头裂缝了,然后去医院拍一个X光,或者拍个什么东西呢?你拍完之后那个那个那个那个那个拍完照片之后是吧,拍完那个片子之后,那个片子上会显示出一个裂痕出来是吧?那么很明显,如果要让显示那个裂痕的话呢,我会怎么显示呢?我比如说这个头发是那种裂痕呢,那你会用这种来显示,你会这么来显示呢?那我很明显用采用这种来显示对吧?都看的更清楚对吧?就大家去医院看片子时候,看到什么,看到往往是整个片子是黑的,而有用的东西都是白的,然后他放到一个底是白的一个灯上一看,非常清楚,对吧,所以这个就是一个。
14:47
应用对吧,所以有人说这个反响有没有用,那么就看你注意的信息有多少,就说你想到底看哪一部分比较突出了,对吧?所以有人说难不难呢?你没听说过什么是反写,你可能觉得很难,那其实就是说一个减就出来了。
15:03
对吧,是不是感觉瞬间就感觉这个有点像什么呢?是不是有点像那个咱们的胶片是吧,就是说到底了,另外再像什么呢?就是你去医院拍的所有的片子都是这种。是不是都是这种啊,啊,那么干什么呢,就是一种反省的东西啊,就处理啊,那么大家现在去医院做这个片子,在很早之前,大部分都要等两个小时。就是如果在这个应该在这个一零年以前去医院等着片就要等两个小时,为什么需要等两个小时呢?大多数就是给你照完之后,那信息都存到电脑里了,到最后要干什么?给你去处理吧,给你把每个点反省过来吧,然后再乱七八糟做一堆东西,那么做完之后再制成片子吧,可能两个小时给你做制作,制作出来,而现在大家去医院呢,大大部分只需要40分钟就可以出来了,为什么呢?首先第一个制片子速度肯定也提高了,但是最重要的什么?最重要的是现在的电脑的设备,它的性能提高了,就是算的速度快了啊,当然了,有人在咱们这个才多少,才八千零六千是吧,人家那个片子像素呢,可能会。
16:03
更高,因为要看到一些细节嘛,对不对,处理起来可能会更多啊,那么咱们现在只做了一个反省,人家里面呢,可能还要做一些其他的,比如做一些我们后边讲到一些滤波呀,一些各种各样的东西都需要再做一遍。同学做一遍啊,所以他们做事也比较多,所以就比较慢啊,咱们这个是这样的,所以我相信呢。就对于咱们来说的话呢,总会有一天啊,会出现一个更牛逼的一些设备啊,什么设备呢,就比如说我想看这断了没。就直接就拿一个什么东西往这一放,一扫,这就屏幕就显示出来了,就这么实时就能出来,那么这种实时的能出来一定会出现两个问题啊,第一个问题什么呢?第一个问题就是说首先第一个是吧,他得这种扫描的过程是对别人和对你是无害的,你不像说是那种强词强什么人都不能接近是吧?啊是无害的,另外那种什么就是要对什么要对实时处理有了很大的要求,就是你扫描出来之后,这里直接能看到吧。
17:03
你像这种骗子之类的,这扫完之后,这边处理半个小时才能才能处理完才能看结果,那你怎么办就不能了,所以总有一天会这么,我感觉应该会能够出来,就是计算的速度上要有很大的一些提升。啊,很大的一个提升啊,好了,那么这是关于什么呢?灰度的啊,这样的一个变化值,那么其实呢,在很多时候呢,我们还对什么比较敏感呢,比如说。我只对这幅图片上亮一点的地方比较感兴趣,不亮的地方一点都不感兴趣。并且是它多量跟我没关系啊,那有一个东西叫什么叫二值化。叫二值化,什么叫二值化呢?比如说我们亮度值是不是零到255啊,我可以认为这样一件事是大于200的,就是亮度高于200的。都是最亮的。低于200的都是。
18:00
黑色。都是黑色,我不关心了,我就不关心它了,我只关心最亮那一部分,那么这样的话呢,这种二值化的图片呢,对于咱们来说干什么呢?对于咱们来说就比较容易的去更再一次干什么呢?更再次去我们想要的一些东西是吧,提取这一部分,所以怎么做呢?所以根据我刚才说的,大家也应该能够理解出来,比如这一部分啊,就这个P我就不要了啊,这个pic我先给它注释掉。好了啊,在这个MATLAB里边2%读十啊,那比如说第二部分我来做个二值化的图片,二值化有没有函数呢?也有,但是我就不用了,我用什么,我自己写,我自己来写了,我自己写什么呢?根据刚才大家的。我们刚才讲解,是不是大家瞬间就会知道二值化到底是个什么呢?二值化其实无异于也就是什么。也就是什么。啥呀,也就是这样对不对,也就是说判断括号pic_GY。
19:05
然后是I逗号阶,它是不是大于200,就值是不是大于200,对吧,如果你要大于200了。那就证明什么,那就证明你是超过这个亮度了,那我就给你就复制成最亮的是吧,那如果说你要没有大于200呢,那你就是那sorry了,那你就是黑色了,因为二值化的图片就意味什么,什么叫二值化的图片呢?其实除了最亮就是。最暗嘛,所以我认为什么,我认为大于亮度本身的亮度大于200的,我就认为什么,我就认为它就是255最亮小于200的,这为什么就是什么就是黑色,好,下边我把这个第二张图片再显示出来。对吧,这就是一个非常简单的二值化,并且这个200是什么,这个200是不是大家就会认为就是它,它就是个阈值啊。
20:00
是不是就是个阈值啊,对不对,还是个阈值啊。这是原图。这是灰度。这是一张什么呢?这是一张我们所谓的叫做二值图片,那么有人说,那么这个二值图片我看完之后干什么呢?就是说经过了合理的这样的一些,就是咱们也没有做什么合理是吧,但是咱们把如果说我制作这电的时候,把这张图当中亮度大于200的值都变成了白色,亮度小于200的值就变成什么。都变成了黑色。那么比如说这能看出什么现象呢?我告诉你,你有没有发现这样一件事,他们整个的就是我不关心的,比如我不关心脸,我只关心他整个的这样一个轮廓,你有没有发现这个轮廓要比刚才的更对比度更清晰,更明显了一些?
21:03
是不是你比如像。是吧,电脑桌子是不是因为刚才啦,可能什么,刚才可能说刚才你可以看刚才那种图片,刚才这个图片的话呢,如果说我要看这个桌子的话呢,从这个位置到这个位置,可能它的对比度可能不那么明显,可能还会受到什么呢,可能还会受到说下边的某些这样的一些影响,那么而我直接做成二指化以后呢,像这个亮度都已经不够了。直接就变成了。黑的了对吧,直接变成黑的了,那么所以对我们来说是不是在某些时候啊,我们现在就只讲某些时候,是不是我们做这种二值化了之后,是不是会更清晰一些,比如举个例子,大家可以看到是吧,这个地方就下边这一部分。他是这个说是2020年9月8号11.03拍的是吧,而且这个照片你比如说我要提取这个文字,而这个文字的话呢,它是白色的。那后边什么颜色,后边呢,它也是有一种亮度,但是这个亮度呢,它亮度呢,它也有一部分,但是呢,我要提取它的话呢,它和后边的对比度可能就不是特别很清晰,我提取出来可能不太容易提,对吧,那我怎么办?
22:14
我做了这样一种,我做完这样一种之后呢,我再问你这个背景色跟我们这个颜色还有影响吗。几乎就没有影响对吧,所以二值化也是什么,也是我们经常去做图像的一种处理,那怎么处理呢?说白了也就是。大于某个阈值,就是说那那个阈值怎么来呢?那个阈值怎么来呢?所以这个时候。有些阈值是固定的,有些阈值是动态的。什么叫固定的,什么叫动态的呢?比如举个例子,在某些地方,比如光强强度一直不变的情况下,我们一直拍,一直是多少就是多少不用动,那在某些地方就需要动,那地方比较需要动呢,比如说咱们外边的那种啊,那种这个交通灯啊,或者是或者说这个这个车牌检测啊,在外边儿有时候是晚上比时候是白天。
23:03
对吧,有时候光强,有时候光弱,那么到底我们去做二值化需要给多少呢?那么那个值预值给多少呢?可能要干什么,要经过计算,算什么呢?就比如说我算一下整幅图片的亮度是多少,然后取一个合理的值出来啊,这也是有可能的,那当然这个肯定要经过什么呢?这个第一它肯定要经过计算,第二个经过什么呢?它要经过大批量的一些验证,比如在政治条件下啊,我。阈值给多少的情况下,它正好能算出来这个结果,那么经过大量的实验之后,会给出来一个合理的一个范围值,然后我们取得中间值就OK了啊,所以你看有没有发现什么,这就一个非常简单的一个二值化。是吧,这个二值化,二值化之后呢,也可以凸显出一部分大家所关心的信息,就是把背景色去掉了,对吧,是不是背景色去掉了。好了,那么这是我们要讲的这个问题,那么说到底了,有人说那在MATLAB上不都可以实现吗?那么在IP上怎么来做呢?比如说在IP上不也简单吗?RGB图像都给你了,对吧?RGB图像我给你了,让你变成灰度。
24:11
不会,RGB咋变灰度呢?用的是函数是吧?但是我们现在可以通过这个例子,我们可以知道这样一点说,如果我给你的是灰度图像,我让你给我做一个反显图像,或者我让你给我做一个二值化的图像,你是不是觉得很容易啊?其实就是把每一个点的值干什么?就是你比如这个图像在哪,比如这个图像在STEM里存着呢,你是不是挨个把它读出来,然后减,然后去,或者是加上,或者对比一下,换一个数,再给它写回去就行了,是不是这样就变成变一幅图像了,对吧?听着好像蛮简单的对吧?那我问你个问题,那这个呢。那如果我给你的是RGB的图像,如果我给你的RGB的图像。那我让你给我变成灰度呢?
25:02
对吧,那如果我要给你的是RGB图像,我让你变,我变成灰度怎么变呢?是不是应该怎么做呢?所以这个大家不知道了,所以这也就是为什么很简单会出现这样的问题,什么问题呢?就是我们经常会说这样一点什么事呢,就是大家再去做的时候,可以用MATLAB先干什么,先验证一下你这个你的这个思路对不对,但是了,你验证完事之后呢,还发现有个问题什么呢?在MATLAB上能实现的,在IP上不一定能实现,为什么呢?比如你像这种。RGB转灰度,MATLAB就一句话,那到ipg写代码上咋写啊,你总不能也写一个RGB转灰度,那你得有这个玩意儿啊,那咱们是个啥呢?你不知道,所以你要做一件事啥事啊,就是咱们在MATLAB里边第一件事可以用它的函数库去做任何东西验证,只验证你的思路对不对?第二件事要干什么呢?你最起码要做另外一件啥事,就是把MATLAB里边所有的关于函数的东西都要准什么。
26:07
都要转成你自己能够理解,或者你知道他到底怎么算的一种语句,而这种语句它是干什么?才可以用。Ipg才可以写的,对吧?那好了,那我们来看一下这个函数是个啥呢?RGB two灰度是个啥呢?所以我们要对它有个了解,怎么了解呢?我们可以help一下。好,他就会乌七八头介绍一堆,那我们就只看最后一个就行了啊,就是RGB two灰度的参考页。就哪个函数不会的,你都可以help一下。这个是英文的啊,我估计有的人打开之后应该是中文的啊,无所谓啊。我们可以来看一下啊,RGB to灰度啊,RGB to灰度它的它的作用是什么呢?它这的作用什么呢?它的作用上就是我会告诉你是吧,说RGB RGB two灰度的作用就是转换一下这个色彩值什么呢?RGB到哪呢?到这个灰灰度上啊,到灰度上,那么对我们来说的话呢,这是这是人家给咱的历程啊,比如说RGB,哎读进来的,它是读的是P啊,PNG啊,读来之后是这样一堆辣椒,你看人家的这个这个图片就比较好是吧,晚点我们可以把他的图片给搞下来是吧,然后呢,人家你看人家就把这个转成了灰度是吧。
27:40
是不是做了灰度值啊,是他做自己做的灰度值啊,自己做了灰度值好了,那么下面的话呢,我们来看一下。他的这个到底是怎么做的呢?它下面应该也有介绍。啊,这是它的计算公式,什么公式呢?就是啊,他说RGB啊,RGB to灰度这个函数是转换RGB值到灰度的值的,通过什么呢?它是通过了RGB的一个组合的这样一个运算,什么运算呢?就是0.2989乘以R加上0.5870乘以G加上0.1440乘以B。
28:18
也就是说它是通过了这样的一些什么呢?这样的一些计算所得来的。也就是说RGB和灰度之间还是有关系的,对吧,那么现在我们就规定,规定什么呢?规定了一种标准呢,比如说在这样的一种什么什么的计算方法下,用的什么呢?用的是这种标准,就是0.299乘以0.587乘以0.144,那么今天用什么呢?今天我们就用这个。啊,今天我们就用这个值,也就是说RGB to灰度原来是这么算出来的。那好了,那现在我们来举个例子啊。比如说现在我不想让你干什么了,我不想让你用直接的RGB灰度来算。这个灰度值了,你必须要用什么呢?
29:01
你得用那个公式给我算出来吧,那那个公式怎么算啊。那那个公式怎么算呢?是吧?O,你公式怎么算呢?说到底了啊,大家愿意在这算就算,不愿算也可以啊,就知道这一件事啥事啊,不就是这个值吗?是不是就是这个值啊,你只需要做一件什么事啊。你只需要做这样一件事,就是把它的RGB都提取出来不就行了吗?很简单吧,这个也不难吧,举个例子看。For循环I等于一到6000是吧,6000N,然后for循环接。J等于一到8000,然后N,然后呢,PRC。GRAY。他就啊不是它的I逗号接,哎,写到外边去了。
30:05
等于,等于什么,就等于这条公式嘛。把这个公式往这一抄,抄完之后要对应去做变换,比如说首先第一个它应该是无符号八位的啊,就是我们在这都给它做一个调值转换,这是第一件事,第二件事的话,是不是还有个R啊,R是什么呢?R是不是应该就是这个PCRRGB的括号的逗号接逗号一呀。那这个BG呢,是不是应该就是二啊,放不下了是吧。B呢?就是三嘛,这里不就做完了吗。是吧,这里不就做完了吗?对吧,这也是我们所谓的,那么下边这个东西呢,我为了快一点啊,我把下边的先注释掉,就是我们直接就先干什么呢,我们就先看一下现在的这种转灰度啊,这个灰度我也不要了,就是我就来看一下现在的这种转灰度的方法。
31:15
能不能用,现在是不是没有它的函数了,是我们自己写的对吧,这种方法看能不能给他转过来是吧,运行行。是不是报错了?U in,哎,我为什么老写UN呢?
32:24
好了出来了对吧,那么这张图呢,很明显是什么,它应该是我们的这个我们自己显示的这个图是吧?这个图,那么这个是我自己做的图,那么下边的话呢,我们干什么呢?我们也可以说把它这个图也给它放开。我加个一。嗯,我等会儿啊,我去查一个东西啊,这个东西我忘了help fire,它是不是可以给这个名字啊。
33:02
啊,他是可以给名字的。啊,他是这么给名字叫做name,不是给个名字是吧,我们这样,我们自己给个名字出来。灰度。我把这个灰度放到上面去了啊,这是人家自己转的,我给了个名字叫做灰度一是吧,然后我把灰度一给显示出来,灰度一好,然后我在这给个名字,比如这幅图片叫什么呢?代引号name。然后是等号,就是这个是。MATLAB啊,比如我把这个名字域名名称叫MATLAB,就是说这个就是MATLAB所产生的对吧,那么下边这个呢,是我们自己产生的对吧?那么我们自己产生的叫做PG2,它等于GY1啊,就是我先给它分配个阈值啊二。
34:12
然后呢,我们这是自己算的对吧,那么自己算的话是不是叫pic gr2了。二就是这个是我自己算的,我就命名成MY,那么这样大家就会看到一会看到我会看到三张图,第一张图是原图,第二张图的话呢,是通过函数转出来的这个灰度值,但是它命名叫MATLAB,第三幅图是我自己通过pic自己写的一个灰度值,命名叫MY,对吧,我把其他图先关了啊。运行一下。啊,这是原图。这是MATLAB图,看到没?好,这是我自己的图是吧,能看,那这能看出来吧?好,你们来看一下这两个图有什么区别吗?
35:05
呃,这两幅图说你要说应对对比有没有区别,它中间兴许有一定的区别,但是基本上呢,是一模一样的,也就是说my lab中间就是这么算的,对吧。好了,那么这就是我们今天要讲的RGB to灰度的这样的一个理解啊,这样一个理解啊,那么有人说那理解了吗?我理解了,那好了,在ipg里边如何来实现呢?有人说这不给公式了吗?Ipg里边不就把把什么ipg里不就把这一条公式给实现了就可以了吗?啊对,说的很对,Ipg里就是把这一条公式这个实现就可以了,没有任何问题,但问题出现在哪呢?问题出现这个问题是什么问题呢?我们今天要学的是图像,那么关于图像的很多验证,什么叫关于图像的验证呢?举个例子。比如说我们在MATLAB里边,我把一幅图经过了MATLAB的函数也好,或者说经过了我自己所认知也好,我是不是给他做这个结果图又显示出来看看对吧。
36:04
那我问你在ID里边呢。在ipd里边。你怎么样把它写出来看一看对不对呢。你做不到。另外,图像来源从哪来呢?你也不好做对吧,所以怎么办呢?在这我教给大家就是如何在电脑上我们把这一套流程走完。怎么走完呢,就是说MATLAB。一幅图读不进来,然后干什么呢?然后对它进行一个处理,产生的结果是不是一个图片啊?那么下边我们怎么做?下面我们要用I pd去处理同样的路线。然后是ipd处理的,处理边要干什么呢?要把它结果干什么,要边结果也再返回到MATLAB里边,我们来看一看这两幅图有什么区别,因为是一个是还是过来,另外一个是某生,谁走过来的,是我们。Ipg自己算完之后走过来的,明白了吧,好了,那么下边的话呢,我们来去做这样一件事,什么事呢?
37:07
怎么来做呢?MATLAB这边算是通了,但是呢,我们如何把图像信息啊,就是我们如何把PI PI cgb的信息干什么呢,弄到哪去啊。弄到我们所谓的ipg里边去处理,怎么处理呢?怎么来处理呢?所以这是我们今天要讲的第一个问题,也就是说那怎么处理呢?其实很简单啊,比如说MATLAB可以直接读图片,对吧,就把信息是不是就读,是不是就读进来了。Lo或者或者S或者或者可以直接读图片吗?啊,目前来看的话呢,应该是不能了,那怎么办呢?所以我们只能做一件事,啥事啊,就是利用。MATLAB来把信息干什么?
38:02
写给。天气,然后利用谁呀。利用welo来读取图片信息,然后读进去,这才是对的,好了,那么下边我来做第一件事,啥事呢?就是。新建脚本。另存为叫什么呢?就是我们来起一个名字啊,这是我们自己做的啊,比如说我们叫这个pic图片。写PST,我不知这个文件他用没用,它应该是没有的啊,叫PSC就这个文件,那么怎么做呢?这就是我们今天要做的第一件事儿,就是告诉大家如何把图片信息写成TXT。因为只有写成T之后,我们才能干什么,才能够给到ipg里边做,因为IP此时才能读这个T,对吧?好了,那怎么做呢?好第一件事还是读取图片信息,PCRGB等于是一点接接PG读进来,这第一件事。
39:08
第二件事儿的话呢。注意啊,我们在这个上面可以给它加一个叫做。Clear c2 C2就是把它中间缓存量都给它清除了,我们要重新开始了是吧?好,那么这是第一件事,第二件事的话呢,干什么呢?是不是这个PCRGB就已经变成什么了。是不是就已经变成了一个数组了,那么下边我是不是要把这个里面数给写出去啊,但是注意往外写的时候怎么写呢?往外怎么写文件呢?那怎么写文件呢?注意啊,MATLAB,我们写文件和C差不多。和C差不多啊,所以首先填第义第二件事,第一件事叫做fid,叫文件的句柄,比如说这个是我们所谓的叫WR的TXT,就是我要写一个TT,这个T的文件名字叫它,然后f open打开一个文件,什么文件呢?注意我现在是不是打开文件了,但是我这里边有这个T吗?没有没有怎么办?没有你可以硬写。
40:07
叫做RGB date.tst以什么方式打开呢?以写的方式打开,那么有人说那没有这个TT怎么办?注意它没有,它就会给你新建一个,然后写的方式打开,然后打开之后干什么?我们就可以往里边去写东西了。啊,利用这个文件句柄可以往里写东西了,那写什么呢?其实就是把RGB的图像信息给写进去吧,那怎么写呢?注意下我们这么写啊,我们叫冠循环I等于一到6000,波循环接等于一到8000N的,然后呢,就开始去写另外一个东西什么呢?如果说大家愿意去分开写也行,不愿意分开写也行,比如说我不分开,那比如说我就先先写RGB,注意我把RGB我分成三个部分来写了啊,RGB分成三个部分来写了,那首先先写什么,先写一个R吧,我先就是一个相同点,是不是分成三部分了,是RGB对吧?那我往TT里写几回啊。
41:17
我就写三回对吧,写三回的话,我就分成三个数来写了,所以对于我们来说一共多少点啊,一共有4800万个点,是不是四千八百万点。那么我要写多少回呀?我就要写4800万乘以三,我要写这么多次,所以这个图片量就很大啊,我来写,怎么写呢?注意叫P叫FP。T。应该还有F啊,没有F啊,好像有没有,我记得没有啊,其他没有做。然后往哪写呢?往fid w2TT里写,写什么呢?我们单引号以多少进制来写呢?
42:05
注意很多人都是以百分号D,就是以十进制写,注意你不要以十进制写啊,为什么呢?因为你以十进制写进去之后有个问题,什么问题呢。你心去之后reload读不了。Vlo只能读二进制和十进制,不是16进制,所以你不能以十进制写,所以你要以16进制写,或者你以二进制写,二进制太长了,我们以16进制写了什么呢?是百分号。X,注意不是H啊,这个告诉你,除了了vlo里边用H来表示六进制以外,剩下你们,剩下别人全用XX啊,然后写完之后干什么,写完之后我们要做一件事,啥事呢?就是换行。啊,换个行嘛,就换下一行了,我写下一行了,然后呢,这个值多少呢?这个值就是我们的pic。RRGB的I逗号接逗号一,那么这样一写的话是相当于什么呢?是不是相当于已经把第一个点的红色分量已经写进去了,那写完红色之后该写什么呢?
43:12
绿色和蓝色吧,好,绿色和蓝色好,写完之后是不是第一个点就完事了,然后紧接着写第一个点啊。第二个点,第三个点,第四个点第五点一直把4000。800万个点全写完。啊,也就是说这个T里边有多少个点呢?一共有4800万乘以三个点,就这里边会有1亿多个点,就1亿多个数据。啊,会有1亿多个数据,好了,那么我们让他写一下是吧,那么写完之后呢,我们可以把它这个文件给关闭了,F f close,然后IDWRTXT啊。好,我来这来运行一下。
44:00
啊,你运行的话呢,呃,只要运行到这一句话当中啊,它就会产生个T啊报错了。FPT是不是有个F啊,好,我们再来运行一下。好,这个时候他就一直在忙了,人家一直在忙,忙什么呢?他就一直在忙着把这一幅图片的信息写到哪啊,写到TXT里边写的正忙,有人说这个需要等多久,告诉你这个需要等老久老久了,因为你把你以为你想往里边写。这得得1亿多个数据啊。所以需要等很久啊,才能把这个T写完啊,想把T写完,所以呢,我们在这做这样一件事,啥事呢,就是让他先自己写T吧,我也不想管他了。让自己先写着啊,让自己先写着,然后怎么办呢?我们做什么,我们就做这样一件事,啥事呢,就是我们开始去做。
45:05
另外的就是我们去做我们自己的。关于welo的东西。啊,比如现在我要做一个。RGB灰度了是吧。那我们来建立一个工程叫PRG,好,我们今天做的第一个工程叫做。RGB two gry啊,这是我们要我们要来做的是吧,然后呢,我们来去新建一个doc。RTL。Msm。和我们的QPR接好了,那么比如现在我们现在Co里来做啊,我们启动一个cos这样工程。那。
46:12
我们新建。工程。Picture。这个工程名字我们就叫RGB灰度。啊,这个我们选择赛克龙四。就是咱们的骗子仿真工具materiallo。我们新建malo file另存为。
47:03
RTL保存一下,然后我们开始来写这个这个文件,就是这个文件该怎么写呢?这个文件该怎么写呢?这个文件我们这么来写是吧,那么首先呢,我们只做一个,因为它就只是一个计算公式,还记得吧,所以它就属于一个,因为我们的RGB是不是都是888的,所以就是RGB的R。输入的RRGB的。GRGB的。B,然后输出灰度是不是也是八倍的,叫做GRY,好了我们输出了,那么这么一写的话,是不是根据刚才那个就是GRY,是不是就应该等于什么,是不是就等于我们这个里边的这一条公式啊好往这一摆,然后粘贴是吧,然后R就等于。
48:15
R嘛,G就等于G嘛,B就等于。对吧,好了,是不是大家就会觉得这个其实就应该这么写对吧?这毫无疑问啊,我给了你RGB,然后呢,你就我给你一个点,你帮我算一个点,我给你一个点,你就帮我算一个点,对吧?我给我,我把所有点都给你,然后你就给我算完,算完之后再算完之后给我,我给你个点,你算完给我一个,我给你一个,你算完给我一个是不是就OK了,非常简单,对吧?好了,那么问题来了。这个写完了,写完之后呢,我们来进行一个综合分析,看下麦完事没。还早呢。忙着吧。哎呀,刚说。也没事啊。
49:00
不管他了。啊,我们来综合分析一下。这个画图怎么还有这么多?好了,报错了,报错什么呢?说wello h dl不支持这种特性什么呢?就是这个叫做你可以认为就是这个实实数或者实数的变量类型值不支持就是wherelo不支持我们在代码里边写什么,写小数。不支持,所以到这又有一个问题了,什么问题呢?Lo不支持些小数,我们怎么办?所以现在就问题就来了。就我也不知道该怎么做了,那现在问题就是确实来做到这这个公式对不对,这个公式毫无疑问是对的,所以你达到拿到任何数学的东西来说都是对的,这没问题,对吧?那我们应该怎么做呢?就大家来想一个问题,你会怎么做呢?比如举个例子,现在我想让你去做一件事,什么事呢?比如我要让你算一下3.5乘以八等于多少,你会怎么算?
50:10
大家很明显都会做这样一件事,就是先不要管底,先算35乘以八,算完这个结果值之后,再把多少钱。挪一位是吧,那很便因为什么?因为大家会算的是什么,是整数吗。那么很明在这我可不可以算整数呢?可以呀,像刚才这个就说了是吧,什么呢,说我们可以。把所有的数都乘以多少?乘以1000。对吧?我乘以完1000之后,然后算完结果干什么呢?再除以1000可不可以呢?可以,这都没有任何问题,但是在我们I pd当中,或者在数字当中,我们基本上没有人这么干。为什么没有人这么干呢?因为乘以1000麻烦吗?不麻烦,这不就是299,就我因为它是个死值,我可以拿,我可以直接在这直接写就可以了,对吧?那但是什么时候不方便呢?就是这个灰度除以1000的时候不太方便,你不要经历个除法吗?
51:06
这个除法太耗费资源了。我们没有人这么做,那都怎么做呢?其实跟你的思维都一样,怎么做呢?我们在咱们平常人脑子计算的时候,都愿意干什么,都愿意扩大的是1000倍,对吧。那其实真正的我们在数字当中扩大多少倍啊?扩的都是二的N次幂位。比如说我们可以干什么呢?比如我可以把它扩大成1024,比如说我把它扩大一024倍,那我把它扩大成1024倍以后呢。关到1024倍以后呢,有的人开始说,就这说这样的例子了,说如果你把它扩大成1024倍,那我问你0.2999乘以1024有小数吗?有,比如说那你这不对。你看,我乘以1000,每小数完美计算,那我问你。
52:02
你虽然乘以1000是完美计算,没有任何的小数,那我问你,你算完之后,后面是不是还要除以1000?你除以1000的时候,除出来之后会有小数吗?也会有的对吧,那如也会有你的小数去哪呢?是不是也就被你丢掉了,因为你只要整数对吧,就被你丢掉了,那好了,那问题就是,那我现在呢,我是不是也会乘以我乘以零二十四是吧,乘以零二十四是不是也在有小数了,那我小数不要丢掉了。那就是说那你乘以1024有小数你不要了,那行,反正反正丢了点就当差不多,那问题是你算完结果之后,你这个结果不还得再除以1024吗。啊,除以024,我总感觉除以024比除1000还难呢。但现实是什么?在数字内容当中,除以024,大家谁会真的用除法呢?比如除以四会干嘛?除以二会干嘛,对不对?比如我除以0.4,除以024怎么除?我会除以024吗?我不会干什么,我会右移,就是右移十位。
53:07
说白了就是第十位不要。对吧,那么这样是不是就OK了,所以在我们所有的计算当中,我们从来没有人去扩大一零二就扩大一千倍,都扩大多少。扩大至1024倍啊,扩大至1024倍,那么有人说扩大一024倍相当于什么意思呢?注意在这我们给大家讲另外一个例子,叫什么叫做定点数。什么叫做定点数呢?注意,定数就是个数,什么点什么意思呢?就是小数点的意思。是小数点的意思,比如举个例子啊,比如举个例子什么呢。咱们俩之间发送数据只能发什么?咱们俩之间发送数据只能发送整数,就不能发小数,只能发整数,比如8173258369143,我只能发走整数,不能发出点。但是呢,咱俩人心里默认有个规定,就咱俩人都知道我给你发送143,其实我给你发的数不是143,而是14.3。
54:12
我给你发送007,不是说七,而是零点,而是0.7,什么意思呢?就是说咱俩心里默认都知道什么都知道,我给你发的三个数当中的前两位是整数,最后一位是。小数,但是这个我给你发到147258,看的都是整数,但是咱俩心里有个默认,这个点在哪啊,这个点不在最后一位的后边,而在往前挪了一个位置吧,那么像这种情况下就什么我们称为叫定点数,就这个点在什么位置,比如说0.299,它应该是一个值,但是我给它乘以了1024以后意味着什么?地面上的小数点往前移动了。十位。是十位,也就是说乘以1000乘以1000不是移三位嘛,乘以1024的就移十位了,注意你说的是一个是十进制的点,一个是二级的点不一样吧,所以乘以二次边形是什么呢?今天这个点完全就一个多少。
55:10
移动了十位,那么也就意味着说,虽然我们在计算的时候还是说的这个值多大多大多大多大,但是你要心里要知道,其实呢,当我给你的数的时候是多少多少值的时候,其实这个是这个数并不代表那个数,为什么?因为它的点就是不在最后在哪。而在前面就好说,我给你发了个148,你说我给你的是148吧,不是因为咱俩默认好像就在哪啊。底在四的后边,其实是14.8而已,对吧,因为我因为我不太方便发底,或者我也发不了底,那怎么办?咱俩我给你打个电话,注意啊,我给你发的所有的数,记得偷偷的往后挪一下子,要不然没办法,所以定点数的点在哪呢?在写代码的时候,这个工程师的心理在这儿,没有在代码上体现啊,没有表现,那所以这这个代码就不能这么写了,那应该怎么写呢?
56:02
哎,这样就就换了,换什么了,就完事没还没完事是吧,那就换成了。1024乘以。0.299等于306.1765等于多少306是吧?所以我们就要写另外一件事了,就是比如我把这个再再先复制一下好,那么这个值变成多少了?306是吧?啊,注意你就不能写三零六一点七了,就306好了,再往下10241024乘以多少0.587等于601。001对吧,那么后边这个值呢。1024乘以。0.114等于。
57:03
116啊,你到底写116还是117都可以啊。116好,那么大家这样来想,上边这个是不是相当于什么,现在这个值是不是相当于到下边之后都被扩大了1024倍啊。那么这个结果是不是也会现在被扩大一024倍啊,那扩大一024倍是不是相当于就是。这个值是不是相当于会被左移了十位是吧,所以那刚才是八位,现在呢,是不是变成了18位啊,就17到零的T的TP,然后呢。这个值是不是相当于就是这个值了,就相当于,反正你就扩大了多少多少倍,但是我最终输出的是这个值吗?不是应该什么,应该是GRY,应该等于GRTMP左移十位,但是基本上很少有人这么写,这么写你能理解,但是我一般不这么写,我怎么写呢?我会直接就写它的时期到他的。
58:10
几十就四九到零不要了,其实是一样的,你左移十位,不就是把九到零给。移出去了吗?移出去之后,然后他的17到十不就到后边了嘛,然后拿过来赋值嘛,跟他直接要一不一样一样的好了,那么在这种情况下。我们再用综合剂去综合的时候呢,那肯定就没有任何错误了,对吧,因为它都变成什么了,都变成了一些。我们能够综合的东西对吧,所以在这儿给大家讲了这样一种啊,叫做定点数,以及如何小数在这个里边的计算。啊,就是我们要去学着去转啊,就是要把小数转成定点数,然后干什么呢?然后再做计算,算完之后呢,再把点再还原回来,其实这个相当于什么呢?这个相当于什么?这个相当于其实就是转成定点数计算,算完结果什么?算完结果是18位的,大家要注意,虽然它是18位的,但它的值可不表示18位这边什么它的值值表示前八位是整数,后八位,后十位是。
59:14
小数,所以怎么办?我们只取整数即可。所以就来了。是吧,啊就做完了,那么做完之后呢,我们来编一下是不是没有任何问题了啊,没有任何问题了啊,这就是我们啊简单这样的一部分啊,就是关于定点数的,那么其实呢,对于我们来说啊,有些人说我不太知道什么是定点数,那怎么办呢?告诉你,如果你不太理解,其实你跟别人沟通起来会比较麻烦,但是其实你写代码很简单,怎么呢,你就注意记住。我的代码里边不让出现小数,那我就不出现了,那我都变成整数,那我怎么算呢?我肯定就要扩大,你很简单,大家都西的扩大,那我先扩大了以后,后边干什么。要缩小吗?对吧,那我扩大多少倍啊,我如果都扩大一百倍,那我到最后就要缩小100倍,那都扩大一千倍,我就缩小1000倍,那至于我们怎么缩小呢。
60:08
扩大就是乘,缩小就是除嘛,那我很明显我愿意乘多少呢?我很愿意在数字中很愿意乘的是二的多少次幂,而不愿意去用咱们实进制当中的什么一千一万次的都愿意是二的多少次幂,对吧?所以我们用多少呢?我们用的1024,有人说不我就不愿意用1024,我就1024不好,因为比如说1024乘以什么那个值之后等于三零六点一几几或者小数呢?不好,那我怎么样能更精确一点呢?那你可以不乘以1024,你乘多少?你乘以2048吗?你乘以2048是不是会更精确?对吧,那你乘以2048之后,后边该干什么,后边就应该除以多少,就不应该移十位了,应该移11位,那么有人说那我那我不想,那我还想弄4096呢。可不可以,可以,你可以无限的去接近,但是有个问题,你即使再接近,再接近,其实都有误差,对吧?所以我们就来说这一件事。
61:07
对或者不对,没有这样区分,只有一件事,就是误差,你能不能接受,你能接受了就是对的,你接受不了就是错了。所以1024有没有误差,有,那2048有没有,有4096也有,但很明显一件事,就是4096的误差肯定要比1024的误差要小一点嘛。这个能理解吧,啊,注意这个问题啊,注意这个问题好了,那么这个是我们今天要讲的第一个任务就是。在我们的数学计算当中啊,有一些小数值我们应该怎么计算啊,就是这个计算好了,那么这个图片好像确实太大了是吧。啊,它太大了,他几万个点都没有结束啊,几万点都没有结束,太慢太慢了。
62:11
问,能不能偷一下他这个图啊?咱们是有那个截图是吧,不不我我用截图吧,这个咱们熟,这是李彤刚交给我的截图啊。其他孩子。啊,没事,清晰不清晰无所谓,咱们只讲的是这个原理而已吧,对吧,好有图了是吧,保存。保存哪去呢?我们也保存到我们的。我们JPG。他不是有一了吗?我保存着二好吧,那以后上课就就用咱们二了,不用不用人家了,一会人家告我了,怎么着,好了,这个就让他暂停吧。
63:07
我让暂停了啊,那暂停了之后,我们可以偷偷去看一下啊,我们给他暂停了对吧,我们来看一下,刚才跑了那么久,他一共写了多少个数字呢?在哪这个是吧。写了102兆了。啊,从这开始写对吧。写多少个数据了,写了写了2600多万了,快快快了吗?我们一共是4800万4800万乘以三,所以他才1/6嘛,啊太慢了,太慢太慢了,那就不要不要不要不要不要他了,把他推的太慢了,这样我把这图给删了啊。我把这图删了之后,注意啊,我刚开始给你们写的exe和RGB two灰度的值用的都是1.jbg,再编译就编译不过去了啊,所以从我这拷走编译不一为我把一的JPG给删了,这是第一个,第二个是这个二的图和一的图大小肯定不一样,你看这个图只有476乘以3634啊,478乘以346啊,所以我们在来讲这个时候注意啊,我讲的只是原理,我希望你能听明白,你自己你你也最好不要来我这考我的代码,你就自己考你自己的好来改一下啊,下边是不是就不要读一了。
64:23
开读二了是吧?呃,这个JPG是大写的,我估计大小写应该没有什么区别啊,这样我们为了方便简单起见啊,我们复制一下,呃,我们让它一样吧,万一不一样了。哎,大写不了呢,好,然后呢,这个地方变成多少来着。不知道记不住,记不住,就这样记不住,先给它注释掉,然后保存一下,然后运行。
65:03
这不就知道了吗?然后再给他弄回来。这个地方是346,这个地方是478。好保存,然后就运行。这个就很快了啊,这个一共就没多少点了是吧?呃,刚才用那个大图只想告诉大家一件事儿,啥事儿呢,就是你会发现数据量一旦多了,上微机处理线也很慢,所以大家在大学里边啊,或者说做很多东西你会发现啊,很多人保证MATLAB跑了三天能跑个结果,其实难嘛,不难,就是多呗。对吧,这个完事了,完事了,已经完事了,我们来看一下这个TT里有多少个啊,就是这个码是吧。来看一下有多少个数呢?有496164对吗?
66:01
不知道不知道算346乘以478是吧,346乘以,那这个时候就不要拿计算器了,都打开B还用计算机不就丢人了吗。是不是应该346乘以478再乘以三啊,因为一个项点我们会写三次嘛,减多少呢?496164是吧,496164对吧,写完了吗。所以有人说这个小图片这么快嘛,你看这个小图片确实快,但是它里边也有49万个数据呢。是不是好了,做完了,做完以后呢,我们来去。做另外一件事,什么事呢?是不是该写TB了是吧?是不是该写TB了?好,我们来新建malo OK file另存为。诶诶三,然后写一个它的T点。
67:05
打开。TV。化。
68:02
RGB的R。GB和G,好,RGB的R。计。B。G,好了,那么RGBRGB啊,RGB的RGB从哪来呢?它是不是应该是要从这个要从这个文件当中把值读回来啊。是吧,因为很简单,大家都会知道是吧,其实里边一共多少个点呢,它应该一共有。346乘以768个点,但是每一个点的话呢,被分成了三份,所以第一个点呢,这个应该是第一个点的R,这个应该是第一个点的G,这应该是第一点的B,这个应该是第第二个点的R,这是第二点的G,这是这三个,这是第二点的B是吧?好了,那么我们怎么样把这个值给读到v log里边呢?注意啊。
69:10
我们开始来讲解这个文件。第一件事,REG7到零的RGB date memory,它一共有多少个呢?这个这个里边一共多少个呢?一共有496164,所以应该是。496163到零是不是一共有496164个数了好。我现在就先定义了一个它是八位的,然后定义了这么大的,这么这么大存储空间,然后呢,我下边是不是要做一件事啥事啊,我是不是接下现在就该做这件事啊,就是把第一个数3A放到零里边,第二个数一放到第二个里边,然后就把这所有数全放进去,因为因为这种情况下,我放进去之后,我是不是才能够读啊,要不然我怎么读T啊,所以其实我们读T并不是去读T而什么,而是把T里的数据放到我们哪儿啊。
70:15
放到我们内部的中间缓存里边,然后我们再用中间缓存不就可以了吗?对不对,所以怎么做呢,是这么做的啊怎么读呢。Initial。Dollar。B读me,用16进制读。然后注意啊。在MATLAB里边,MATLAB里边都是单引号,在vlo里边都是双引号,双引号读谁呢?是不是就读这个RGB date呀,啊RGB date啊叫RGB。
71:00
B date.txt读到哪去呢?到这个里边去。啊,这个没什么可讲的,这就是一条专门的语句,那么这样的话是不是就把它给读。读进来了,读进来之后我是不是就可以干什么了,我是不是开始可以赋值了,就是RGB是不是可以赋值了,然后呢,咱们赋值了,怎么赋值呢,怎么赋值呢?所以因为这是个存储器嘛,所以我们要再定义一个地址,这个地址需要能够表示到这么大,那么这个地址是成多大呢?多少位呢?是不是要表示这么大呀,所以这就开开动脑筋了啊,这是十位。这是十位,这是几位?九位对吧,因为九位就能表示到511了,所以总共需要19位对吧,所以需要一个19位的地址。
72:02
对吧,好了,那么下面我们开始写啊,It initial begin end,地址先等于零啊,这先等于零,然后干什么呢?我们来repeat,重复多少次呢?重复多少次呢?比如我们有多少个点就算多少次呗,因为我们现在对于我们这当中是不是一个点只能就是每次只能算一个点,因为只能每次给一个RGB一个点嘛,对吧,所以我们要重复多少次啊。多少次啊,是不是应该是。346乘以748呀啊478346乘以478,我也不知道啊,我也懒得算了K,然后呢,首先第一件事就是RGB的R。RGB的R是不是应该等于谁啊?是不是应该等于rgbgb date memory第零啊,然后。
73:13
RGB的G是不是应该等于一啊,RGB的B是不是应该等于二啊,然后再延时20对不对?好了,那我问你啊,就假如说我还没有写repeat的时候,是不是应该等于R等于零,G等于一,B等于二,然后延时20,延时20之后应该写什么?是不是应该写接着往下写,应该是等于,这等于几三,这等于几四,这等于几五是吧?也就是说每颜是20,把一个点给进去,每颜是20,把一个点给进去,对吧?当然你要这么写,你要写多少个,你是不是要一直要写到什么346乘以768去了,太难了,怎么做呢?所以你来看一下0123这012这边呢,345它是不是可以有规律啊,比什规律呢?就是第一个数是零,第二数是一,第二数是二,下边是345,那么是不是他们统一偏移几个就是啊。
74:10
PA3个对吧,那么也就是说我们每次做完之后。加上a drr偏移加上a drr偏移加上ad drr偏移,然后ad drr等于ad drr加三。好,你这样来想,重复的第一次的时候,ND等于几?等于零嘛,所以就是012嘛,然后repeat在重复第一次的时候呢。再重复一次是等于几啊,是不是它就变成三了,三的时候变成几了345,然后再来一次呢。是不是A变成六了,就变成了678,是不是这样的话,就现在就什么,现在就一次,每次输入一个点等了20。
75:00
那秒,然后最后输入完了对吧,输完事之后呢,就完事了是吧?好然后呢,我们在这是吧,它是RG好就做完了,做完之后呢,编译一下好,那么然后呢,我们下边干什么呢?去做仿真啊,去看一下它算出来的这个灰度值啊,它算出来的灰度值对不对。啊呃,让大憋一着,我再说一下啊,咱们现在的这张图啊。咱们现在这张这个就用的人家的这个辣椒这个图啊呃,其实如果用这个图大家去干什么呢?大家去提取那个蓝色绿色红色分量应该会很好玩,就是因为辣椒是红的,所以这个地方只有红色,其他颜色提取就是黑了。
76:07
啊,可能就是黑了啊,就是黑色的啊啊大家到时候可以自己来做吧,啊就色了好了,咱们这是不是完事了,不然这是不是应该做个设置去是吧,拿个TB的名字右键复制,然后呢去做个设置setting。然后。然后粘贴。PB。注意啊,因为你这个里边是不是读了个天气啊,是要干什么。要把天然气也要给。添加进来啊,铁体也要添加进来,所以添加那个天梯在哪呢?是不是在我们的。MATLAB里边是不是有一个叫做。RGB点天气啊,Open添加进来啊。好,完事之后呢,我们去做一个仿真。
77:02
好,那么在这个仿制当中,我们要验证的东西还蛮多呢啊,首先第一个我们那种叫做定点数的扩大缩小的方法对不对,这需要验证,第二个的话呢,我们需要验证什么,我们需要去验证一下,我们这种读数据有没有读回来是吧,有没有读回来啊,所以在这学验证东西蛮多的啊。嗯。好,完事了是吧,也有这么多数,好,首先我们来看一个问题啊,比如说这是RGB是吧,我们都给它改成无符号位。那我问个问题啊,你看首先就是这样一路第一个。读过来第一个数是多少呢?是不是五十八二十七五十九啊,当然了,我们应该改成16进制啊。因为因为什么,因为这个TT里边是16进制,对吧,是3A13B是吧,3A。
78:04
EB3B。3A1B3B下边是3C,不是3B1C3C3B3B1C3C都没问题吧?好,我们最终来看一下最后边。最后边是这个301631。301631。301631对吧,这个我也造不了假,我当着你们的面都是现写的啊也我也这个这个玩意儿也不是我自己做的,所以就证明把所有书都读进来了是吧,那么读完之后呢,这是第一件事,证明什么,就证明注意啊,以后读天气会了吗。是不是围绕我可以读天然气了,好了读进来了,读进来之后,这是第一件事,第二件事来看我们计算的对不对呢。
79:00
计算的对不对呢?计算对不对呢,你不知道是吧,不知道来给我算一下,比如说58。乘以27啊,不是58乘以多少来着。我们用MATLAB来算吧,我懒得用那个算了啊,用那个算太麻烦了。R等于多少来着?58是吧,注意啊,我这是不是已经变成了十进制了。啊,58是吧,五十八二十七五十九是吧。这边是58是多少27这个是59是吧,等于多少39.9170,我们算算多少39就是它默认是取整呢。
80:11
对吧,那么再往后我们再随便算一组,比如算这个六十二十九六十一好吧。60多少来着。29是吧,六十一四十一点九一是吧,等于多少?41是吧,所以就是说我们这个计算有问题吗?没有,因为我们本身就是什么,我们本身就是取整,对吧,是不是我们本身就是取整啊,那么有些人说最好不要去整,能不能做个四舍五入。啊,能不能四舍五入啊,当然也能了啊,当然也能了,那怎么做呢?那就是很显然一个问题,就是说你就不能够,你看你四舍五入啥意思,四舍五入不就是点五以上要进位,点五以下要落下去吗?那么怎么能算点五以上点点几以上的,其实就是我们不要移十位了,移几位啊。
81:09
以九位还剩了一位,剩那一位其实就是点五的标志位,那位唯一就。就前面要加一那位为零,就不要加了,所以最终算完之后干什么,最终算完之后就变成了什么,变成了就是前面那一位加上最后一位。就行了啊,但是在这我就不再说这个问题了,希望大家知道,那么我们来看一下是吧,这个计算是不是也是对的,就证明了,证明我们这种定点数的计算方法有问题吗?没有,虽然都是取整是吧,但也没有问题,好了,那么下边的话呢,我们再来教大家另外一个东西,比如说我们现在要把中间值给调出来,叫做这个值。我让他跑一下。我让他跑一下。跑完之后呢,你看这是不是有个数啊,这个值是吧,我把这值改成无负二位等于多少。
82:04
等于40819,那我问你这个值,这个值在这显示的虽然是40819,但它真的等于40819吗?它应该不是的,为什么呢?因为这个值应该等于什么?这个值其实应该等于它这个数的小数点要往前移动。十位。是不是要移动十位啊啊,所以有人说那这个数真的是往其实就是这么多,但是呢,它如果真正在过程日心里呢,它被开点数,那这个数应该往前移动,要十位呢,所以这个点在哪呢?在代码以及图片上显示不出来在哪,在你心里,心里在哪,就是说在小数点往前挪十,那么对于仿真的时候可不可以看到呢?当然是可以的,比如说我们选择它右键把它的进制设置成什么呢?设置成这个global啊,使用global setting,然后再选择它右键进制,选择第一个叫做global。
83:01
呃,Signal的这样的一个进制,然后在这里面选什么呢?选择定点。啊,定点数选定点数之后呢,我们说它是定点的,然后呢,它这这个是一共显示六位数啊六六个这个叫做数字,那么这个是小数的意思,这是精度小数,有几个小数呢?我们是不是有十个小数啊,就是有十位是小数吗?然后点击OKOK。是不是就显示出来了,39点。八六二三四十点八幺。八六幺三四十三点八五八四上面直接就是。取代丈夫。是不是,那这个点咋出来的呢?比如说刚才这个数不是几千多吗?他怎么变成39了呢?注意任何一个值摆在你面前,他写了个1万。这对你来说真的就是1万吗?他不确定,因为你要用一种什么样的眼光来看待它,明白了吧,所以啊,不要被这些数字啊所蒙蔽,对吧?这是一个39.8623啊,只后边那个所有那十位都是什么,都是小数而已,我们只是忽略不计。好了,那我再问个问题啊,原图片在哪呢?
84:14
原图片呢,我们在。我可以把这样。我们叫原图啊,它这个是可以写汉语的啊原图啊,虽然我们不太建议,但是你可以写啊原图,然后呢。好,这是原,这是原图,我问你原图在这儿是吧,然后呢,人家是不是也可以做出来一个灰度图啊。
85:23
MATLAB。有啥情况?那算了不用了,好,那就MATLAB这个用汉语拼音啊,灰度图啊,然后这个是也就是说咱们可以再来运行一下是吧。这个是原图啊,是支持汉语的,可能我这是bug的啊。
86:03
原图这个是人家MATLAB的灰度图。这是人家自己做的RGB转灰度对吧,然后这是不是咱们拿到的原图是图是数字对吧,我现在让你做了一个什么,转成一个灰度值是吧?好你转完了吗。你是不是也转完了。那我问你转的对不对呢。比如说这个数是对的,那我问你图呢。你转的图了。对不对,你现在是不是就急需要想把GRY这个值转成什么。转成图啊,因为最起码来说做图像的人。很要求这样的,比如说原图给你了,别人处理一遍是这个样子的,那你原图也给你了,那你处理完之后的结果是什么呀?比如说这数都是对的,告诉你数都是对的,到最后出来图,万一不对的,因为都是图像嘛,谁也不确定谁到底做的是什么,对不对,因为现在我们做的还简单,如果做的复杂了呢。
87:05
你怎么知道你做的那一部分对不对呢?你也不知道对吧?所以怎么办?你是不是就得想着把gray这个东西干什么恢复成一张图吧?那怎么恢复图啊。对啊,所以这一部分我们放到下午来讲什么呢?就是我们要告诉大家另外一件事,什么事呢?就是MATLAB,它产生了TXT,然后vlo读TXT,就是读出了原图数据,然后我们经过了一堆。加工之后是不是又产生一个结果呀,那么这个结果在MATLAB里边其实就是什么,就是数据,但是对于我们来人来说,我们是做图像处理的,所以我们要干什么,到最终要把它干什么,看到还是结果图吧,对吧,看的结果图啊,虽然这咱们今天这个比较简单,还原回去肯定对,但是如果明天我们做滤波呢。你还能看得出来吗?看图你就看不出来对不对了,是吧?所以怎么办呢?所以们干什么,我要再把它还原回去对吧?那还原回去怎么还原呢?所以还是那句话,MATLAB产生T,你welob读取,那welo就要干什么产生TTMATLAB来读取,MATLAB读取了之后读取了不是一堆数据吗?要后边干什么?
88:23
后边干什么?后边就只能是要把读者这堆数据再还原成图片,所以我们今天下午要讲另外一件事,就是welo怎么来产生天然气,MATLAB如何来读天然气,并且还原成图片,然后此时我们就把一套在图像与ipg之间,就是说这个就是关于图像处理的,MATLAB和ipg之间就打通了一个关系,什么关系呢?就是MATLAB是验证你的思路对不对,而我们就可以产生TST,然后welo读取了之后,然后做处理,处理完之后产生TXT,再回制图,这一套再过来,那么是不是就可以这么一这样一件事了,什么事呢?就是MATLAB处理完是对的,然后原图不动,我让welo处理了一遍,结果也是。
89:13
对的是吧,那如果vlo处理完事以后呢,咱们是不是就可以说真正的去做实战了,比如说外部的个图片,我就可以这么处理了。是不是因为经过验证是没有任何问题的,对吧?啊,所以这就是我们要讲到这一步啊,所以今天要讲的有三件事儿,第一件事儿。就是认识图像。第二件事儿叫我们。学习要学会干什么,要学会去用。Vlo语言model和我们的cos里边的一些东西,比如定点数,浮点数,然后以及我们的一些仿真过程,加TT这些过程啊,还有什么读T气写T气,MATLAB本来读TT写T气,图片是怎么回事,怎么还原图片,怎么写T,乱七八糟这些东西,第三件事儿就是希望你注意,这是最重要的什么呢?就是。
90:12
MATLAB ipg他们两个之间如何来进行联合验证?你的vlo做的对不对?就是这套流程懂了吧,在这套流程当中,我们还有。将近1/3没讲完啊,这1/3我们放到下午来讲,就是vrlo来产生。TT model STEM来读TT model SIM读完T之后再还原成图片,最后还有一件事就是验证,就是验证完全mylab这套流程对不对?就是出一个图和转出去vlo产生这个图,这两个图做个。对比对吧,其实两个图一不一样,我告诉你这个图不一样。但是但是有个但是有的地方是一样的,比如说很简单啊,大家可能会想说这样一件事,什么事呢?在咱们vrlo当中是不是直接取的整啊,比如你是49.9,我也是写的49对吧,那在MATLAB当中,49.9它会按照几来处理呢?
91:10
你不知道。我只能说你不知道,因为你不知道它是直接取整还是往上,直接往上取,还是直接往下取,还是四舍五入的取,你可能都不知道,所以有的地方可能会不一样,但是不一样也无所谓,因为是图像,图像的话呢,就是亮度稍微高一个和稍微减一个,对于人的视觉上来说,或者对于处理上来说,其实没有什么太大的。区别对不对,好了啊,上午讲课就到这了,下班。
我来说两句