求大神帮我解释一下截图里面的MATLAB程序

2024-05-08 13:20

1. 求大神帮我解释一下截图里面的MATLAB程序

你别用截图,直接用程序代码,就可以直接利用,在句后加注释。

求大神帮我解释一下截图里面的MATLAB程序

2. 麻烦Matlab大神帮我解答一下下面代码

这个函数里inpoly这个函数 matlab里面没有(用的2014a),是不是自己编的?

function [R cx cy]=max_inscribed_circle(ContourImage, display)

% get the contour
sz=size(ContourImage);
[Y,X]=find(ContourImage==255,1, 'first');%找到第一个非零点
contour = bwtraceboundary(ContourImage, [Y(1), X(1)], 'W', 8);%调用函数进行边缘跟踪。
X=contour(:,2);%边缘x轴坐标
Y=contour(:,1);%边缘y轴坐标
% find the maximum inscribed circle:
% The point that has the maximum distance inside the given contour is the
% center. The distance of to the closest edge (tangent edge) is the radius.
tic();
BW=bwdist(logical(ContourImage));%进行距离边缘,用的是欧式距离。BW中每一点的值是
%ContourImage中每一点到距离它最近的非零值的距离(欧式距离)
[Mx, My]=meshgrid(1:sz(2), 1:sz(1));
[Vin Von]=inpoly([Mx(:),My(:)],[X,Y]);%这个函数的作用
%我估计是判断Mx,My中哪些点实在上文检测出的轮廓中,并把它们的线性索引值保存在Vin与       %Von中
ind=sub2ind(sz, My(Vin),Mx(Vin));%变换为线性索引
[R RInd]=max(BW(ind));%求取距离值最大的点的线性索引,R为最大距离,Rind为线性索引
R=R(1); RInd=RInd(1); % handle multiple solutions: Just take first.
[cy cx]=ind2sub(sz, ind(RInd));%将线性索引转化为x,y坐标
toc();

3. 求大神翻译一下matlab代码。

m = mobiledev
获得结构体mobiledev句柄
m.AccelerationSensorEnabled = 1
m.Logging = 1
改变结构体中AccelerationSensorEnabled Logging 为1
pause(15)暂停15秒
m.Logging = 0
改变结构体中Logging 为0
[a, t] = accellog(m)
调用accellog函数,结果为a,t
plot(t, a)
legend('X', 'Y', 'Z')
xlabel('Relative time (s)')
ylabel('Acceleration (m/s^2)')
画图

x = a(:,1)
y = a(:,2)
z = a(:,3)
mag = sqrt(sum(x.^2 + y.^2 + z.^2, 2))
计算mag的值
plot(t, mag)
xlabel('Time (s)')/ 
ylabel('Acceleration (m/s^2)')
画图

magNoG = mag - mean(mag)
mag的值减去mag平均值
plot(t, magNoG)
xlabel('Time (s)')
ylabel('Acceleration (m/s^2)')
画图
minPeakHeight = std(magNoG)
[pks, locs] = findpeaks(magNoG, 'MINPEAKHEIGHT', minPeakHeight)
numSteps = numel(pks)
按顺序是三次调用函数
hold on
保持当前绘图figure
plot(t(locs), pks, 'r', 'Marker', 'v', 'LineStyle', 'none')
title('Counting Steps')
xlabel('Time (s)')
ylabel('Acceleration Magnitude, No Gravity (m/s^2)')
绘图
hold off
取消当前绘图figure
m.AccelerationSensorEnabled = 0 将m中的AccelerationSensorEnabled 变为0
clear m
清除m
子函数没有,只能这样

求大神翻译一下matlab代码。

4. 求MATLAB大神,帮我解释一下这段代码的具体意思,用到什么知识,做PPT用

我脑袋昏了

5. 求matlab大神帮我看一下这个函数该怎么调用急急急,在线等

没看到你的问题啊,什么函数啊?

求matlab大神帮我看一下这个函数该怎么调用急急急,在线等

6. matlab中的代码有部分不明白,有没有大神给解释一下呢?

不知道你前后的代码,这有这三行 我只能猜测。
Matrix,openlist都不是系统的函数,应该是你前面定义的数组。
同时m,n具体数值 你应该也定义了,所以
Matrix(m,n)=0   %数组Matrixd第m行 第n列的元素 赋值为0
另一句类似。
不知道你前后的代码,不一定说的对。

7. matlab中的fspecial中有一个功能叫‘motion’。哪位大神帮帮忙解释一下那段代码什么意思。急!!!

这位同学真有缘,我今天正打算研究这段代码是什么鸟意思。想知道具体回答qq上解答
 case 'motion' % Motion filter uses bilinear interpolation关键思想是双线性差分?
     len = max(1,p2);输入的模糊核的长度必须大于1
     half = (len-1)/2;% rotate half length around center求出模糊核一半的长度
     phi = mod(p3,180)/180*pi;这里的输出角度全部都为0到180度,这也是后面sy求解中的不使用ysign的缘由
     cosphi = cos(phi);
     sinphi = sin(phi);
     xsign = sign(cosphi);确定网格中x轴的生成方向
     linewdt = 1;设置的模糊核的宽度,为什么要设置为1?
     % define mesh for the half matrix, eps takes care of the right size其中eps用于保证mesh有正确的size?Eps是matlab中能计算的最小的数,比这个数小的数就认为是0.
     % for 0 & 90 rotation
     sx = fix(half*cosphi + linewdt*xsign - len*eps);fix这个函数是将小数向0方向舍入,如果half*cosphi包含小数则会因为向零舍入造成矩阵的size不能包含全部的长度,所以通过linewdt*xsign进行修正。
     sy = fix(half*sinphi + linewdt - len*eps);与sx类似。由于eps的实际值很小,即使乘以len也不存在较大的值,所以我认为其影响只在某些特定的条件下产生:当sinphi=0时如果没有eps的存在,则sy=1,通过矩阵变换最终的模糊核有3行而不是一行,显然一行的情况更合乎逻辑,所以使用eps就是为了这点,但是为何乘以len还不得而知。
     [x y] = meshgrid([0:xsign:sx],[0:sy]);mesh这条命令在这个应用里面起到了两层作用:1.产生一个能够容纳线段的矩阵,也就是说这个矩阵有合适的size;2.矩阵的元素是坐标!所以可以通过矩阵元素进行坐标方面的运算。
     % define shortest distance from a pixel to the rotated line 
     dist2line = (y*cosphi-x*sinphi);% distance perpendicular to the line这条语句就使用了mesh产生的坐标性质,计算这些离散的点距离我们实际的这条线段的距离,直观地认为在直线上的点最好,如果没有直线上的点的话,我们可以选取离直线近的点来充当直线成分。后面就是根据这些距离与linewdt的大小比较获取的。
     rad = sqrt(x.^2 + y.^2);计算mesh区域中离散点到原点的距离,主要用于区别超出线段长度的点。这一点也是利用mesh出来的矩阵的坐标特性。
     % find points beyond the line's end-point but within the line width
     lastpix = find((rad >= half)&(abs(dist2line)<=linewdt));找出距离原点超出half同时距离直线距离在linewdt宽度内的离散点坐标。这些点留作进一步判断,判断其是否还能用作表示线段的点。
     %distance to the line's end-point parallel to the line 
     x2lastpix = half - abs((x(lastpix) + dist2line(lastpix)*sinphi)/cosphi);
     dist2line(lastpix) = sqrt(dist2line(lastpix).^2 + x2lastpix.^2);该句连同上句是计算lastpix中的点到half末端的距离。后面的判断机制就是看这个距离是否在linewdt之内,在内则可以将该点算作线段内部,不在则将其置为0.
     dist2line = linewdt + eps - abs(dist2line);
     dist2line(dist2line<0) = 0;% zero out anything beyond line width
     % unfold half-matrix to the full size
     h = rot90(dist2line,2);后面这些就是将矩阵进行翻转等,补充一个完整的拥有len长度的线段。
     h(end+[1:end]-1,end+[1:end]-1) = dist2line;
     h = h./(sum(h(:)) + eps*len*len);
     if cosphi>0,
       h = flipud(h);
     end
我只能按照代码进行解释,如果还有看不懂的,自己举一个实例就能搞懂,这种算法的原理我还找不到相关文献有一个理论解释,如果你能找到能告诉我吗?谢谢了。

matlab中的fspecial中有一个功能叫‘motion’。哪位大神帮帮忙解释一下那段代码什么意思。急!!!

8. 各位老师:matlab中的linprog函数如何使用下面一个简单的例子给我解释一下里面的参数都代表什么?

主要是函数linprog(f,a,b,a1,b1,xstart,xend)的使用
其中f是目标函数,题中f=c=[2;3;5]
由于matlab中不等式条件都是=<的,所以,中间的两个不等式组成的矩阵就是a=[-2,5,-1;1,3,1],把两个不等式的右边-10和-12组成向量b=[-10;12],形式ax=<b,其中a是矩阵,b是列向量
然后是约束条件x1,x2,x3和是7,即a1=aeq=[1,1,1]
                        式子右侧b1=7           形式a1x=b其中a1是矩阵,b1是列向量,只不过题中只有一个条件,所以a1是向量了

最后是各个x值的下界和上界,列向量形式xstart=zeros(3,1),xend在后边,是[],也可以不写
由于matlab中求的都是目标函数的最小值,所以例子中是linprog(-c,a,b,aeq,beq,zeros(3,1))
这里系数矩阵都是按列向量写的,一个条件就是n行一列,俩条件就是n行两列。。。
如果我没说明白,你就看这上边的http://blog.csdn.net/qin_zhangyongheng/article/details/7883612
你肯定是在看《MATLAB在数学建模中的应用》这本书吧,我也正好看到这儿,网上都可以找到资料的。一起加油!
最新文章
热门文章
推荐阅读