1701010270
1701010271
function xresult = kgrads(x,d) %计算梯度, d=‘h’,检测行与行之间,即列方向上的差异(梯度),即水平的边缘 if ndims(x)==3 %判断x的维数 xresult = zeros(size(x,2),size(x,3)); xresult(
:) = x(
:); %赋值 x = xresult; elseif ndims(x)==4 xresult = zeros(size(x,3),size(x,4)); xresult(
:) = x(
:); x = xresult; else xresult = x; end [row,col] = size(x); blocks = 3; %3x3大小窗口差分的平方和 %计算差分 if d==‘v’ for r=1
:row for c=1
:(col-1) xresult(r,c) = (xresult(r,c) - xresult(r,c+1))^2; %列与列之间,即行方向上的差异 end xresult(r,col) = xresult(r,col-1); end else for c=1
:col for r=1
:(row-1) xresult(r,c) = (xresult(r,c) - xresult(r+1,c))^2; %行与行之间,即列方向上的差异 end xresult(row,c) = xresult(row-1,c); end end patch = (blocks-1)/2; xx = zeros(row+patch*2,col+patch*2); %初始化 xx((patch+1)
:(row+patch),(patch+1)
:(col+patch)) = xresult(
:,:); %赋值 for r=1
:row for c=1
:col s_grads = 0; for rr=r
:(r+patch*2) for cc=c
:(c+patch*2) s_grads = s_grads + xx(rr,cc); %计算梯度 end end xresult(r,c) = s_grads; end end
1701010272
1701010273
运行程序输出图形如图9-4所示。
1701010274
1701010275
1701010276
1701010277
1701010278
图9-4 还原后的图像
1701010279
1701010280
如图9-4所示为还原后的图像,由图可知,该还原效果是极好的,能够逼真的再现真实的工况,采用计算机程序设计能够完成批量的图像处理,大大的提高图像融合效率,特别对于探月工程而言,月球车拍回一系列图像,怎么融合这些图像为一幅完整的图像显得很关键,因此图像融合技术起到很关键的作用。
1701010281
1701010282
1701010283
1701010284
1701010286
我和数学有约:趣味数学及算法解析 9.4 左眼到右眼的距离究竟多远
1701010287
1701010288
有时候真觉得自己的眼睛看见的总不是那么真实,如海市蜃楼和3D电影等,仿佛一切都触手可及,然而当我们真正去感知时,才发现很多事物本身没那么简单,我们见到的并不是我们想的那样,这一切归因于什么呢?都是我们的眼睛惹的祸。因为我们对自己左右眼的真实距离都无法度量。
1701010289
1701010290
【问题】左眼到右眼的距离究竟有多远?
1701010291
1701010292
【分析】
1701010293
1701010294
左眼到右眼的距离,我们都觉得很简单,直接测测就知道了,然而如果事物真的都能采取如此简化的方法,则人类的航空航天估计注定是失败的。人类在追求成功的同时,更注重对事物的精准度度量。
1701010295
1701010296
两眼最短距离,能不能直接使用两点之间距离最短来度量呢?两眼之间的直线距离,这也是我们常用的距离,然而采用直线距离计算是否合理呢?
1701010297
1701010298
对于一幅图像本身,一幅灰度图像就是二维平面的灰度值集合,本设计中采用左眼点[48,64],右眼点[71,62],进行图像标记,如图9-5所示,左右眼标记程序设计如下:
1701010299
1701010300
%%左眼[48,64],右眼[71,62] figure(‘color’,[1,1,1]) %设置图像背景为白色 imshow(background,[]) %显示图像 hold on %保持句柄 plot(48,64,‘r.’,‘Markersize’,20) %画图 plot(71,62,‘r.’,‘Markersize’,20) %画图
1701010301
1701010302
1701010303
1701010304
1701010305
图9-5 二维图像左右眼标记
1701010306
1701010307
反应到3D曲面上,进行左右眼标记,采用左眼点[20,16,105],右眼点[13,16,72],进行三维曲面标记,MATLAB程序如下:
1701010308
1701010309
%%surf,左眼[20,16,105],右眼[13,16,72] figure(‘color’,[1,1,1]) %设置图像背景为白色 mesh(background(1
:4:end,1:4:end)) %绘制曲面图 zlim([0 256]); %z设置 hold on %保持句柄 plot3(20,16,105,‘r.’,‘Markersize’,50) %画图 plot3(13,16,72,‘g.’,‘Markersize’,50) set(gca,‘Xdir’,‘reverse’); %设置x轴反向 set(gca,‘Ydir’,‘reverse’); %设置y轴反向 box on;grid off %显示图形盒子边框,消除网格化
1701010310
1701010311
运行程序输出图形如图9-6所示。
1701010312
1701010313
1701010314
1701010315
1701010316
图9-6 3D曲面左右眼标记
1701010317
1701010318
如图9-5和图9-6所示的图像中两眼位置,计算两眼之间的距离,那么两眼之间的距离究竟有多远?
1701010319
[
上一页 ]
[ :1.70101027e+09 ]
[
下一页 ]