求水平投影和垂直投影图

查看: 7811|回复: 9|关注: 0
怎么求一个图像的水平和垂直积分投影
<h1 style="color:# 麦片财富积分
新手, 积分 10, 距离下一级还需 40 积分
怎么求一个图像的水平和垂直积分投影?图如下
[ 本帖最后由 wmian7 于
16:42 编辑 ]
<h1 style="color:# 麦片财富积分
高手们帮帮忙啊!!~~
这个问题基本思路是取图像的每个像素f(x,y)点的值,然后对x求积分得垂直投影,对y求得水平投影。小弟刚刚接触matlab和数字图像处理。不会呀
<h1 style="color:# 麦片财富积分
sorry , I cann't help!
<h1 style="color:# 麦片财富积分
原帖由 wmian7 于
19:50 发表
这个问题基本思路是取图像的每个像素f(x,y)点的值,然后对x求积分得垂直投影,对y求得水平投影。小弟刚刚接触matlab和数字图像处理。不会呀
如果是这样的话,那就很容易啊!
你可以参考math以前提供的那些积分程序,比如说simpson,旧的论坛里有。
你只要把数据给函数就可以了。。
<h1 style="color:# 麦片财富积分
这个投影图用的什么函数?
这个投影图用的什么画图命令,才能效果和它一样啊?就是填成黑的。小弟不才,请多多指教
论坛优秀回答者
帖子最佳答案
关注者: 3942
<h1 style="color:# 麦片财富积分
二值图像计算的垂直投影的单位应该是什么
<h1 style="color:# 麦片财富积分
赵老师,我很尊重你,但是我也在论坛里面看到了你的很多回复,你的回复基本上都是无厘头的,你这样还不如不回复,要回复就认真点。我的拙见。
论坛优秀回答者
<h1 style="color:#4 麦片财富积分
关注者: 52
liuxiang22 发表于
赵老师,我很尊重你,但是我也在论坛里面看到了你的很多回复,你的回复基本上都是无厘头的,你这样还不如 ...
我觉得大神回复的很好,有一个提示对于很多人就足够了
<h1 style="color:# 麦片财富积分
我觉得大神回复的很好,有一个提示对于很多人就足够了
具体什意思呢,请解释一下谢谢
站长推荐 /1
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区【图文】工程制图答案孙兰凤第5章_习题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
工程制图答案孙兰凤第5章_习题
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
粉丝量:13
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
垂直投影图(纵投影图)的编绘方法 PDF
下载积分:600
内容提示:垂直投影图(纵投影图)的编绘方法 PDF
文档格式:PDF|
浏览次数:657|
上传日期: 04:11:09|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 600 积分
&#xe602;下载此文档
该用户还上传了这些文档
垂直投影图(纵投影图)的编绘方法 PDF
关注微信公众号Posts - 64,
Articles - 0,
Comments - 487
更专注、更自由!
21:01 by ☆Ronny丶, ... 阅读,
在图像分析里,投影曲线是我们经常要用到的一个图像特征,通过投影曲线我们可以看到在某一个方向上,图像灰度变化的规律,这在图像分割,文字提取方面应用比较广。一个投影曲线,它的关键信息就在于波峰与波谷,所以我们面临的第一个问题就是找到波峰与波谷。
第一次涉及到求波峰与波谷时,很多人都不以为意,觉得波谷波峰还不容易,无非是一些曲线变化为零的点,从离散的角度来说,也就是:
波峰:$F(x)&F(x-1) 且 F(x)&F(x+1)$
波谷:$F(x)&F(x-1) 且 F(x)&F(x+1)$
这么简单吗?显示不是,你首先就会遇到这样的曲线图,然后图上的波峰点并不满足上面的条件。
看到这种情况,你也许会考虑在上面的等式中把$&$和$&$改为$\ge$和$\le$。
波峰:$F(x)\ge F(x-1) \&\&& F(x) & F(x+1)$& 或者 $F(x)& F(x-1) \&\&& F(x) \ge F(x+1)$
波谷:$F(x)\le F(x-1) \&\&& F(x) & F(x+1)$& 或者 $F(x)& F(x-1) \&\&& F(x) \le F(x+1)$
这次是否就这样简单,答案显示不是,下面的这个图就会让你对一些非峰值点作出错误的判断。
上面这幅图真正的峰值只有一个,其他平台上的点,你如果按上面修改的公式,就会被错误的当成波峰点。
下面让我们看一下,到底如何能求得准确的曲线波峰与波谷。
2. 波峰波谷算法
投影曲线实际上是一个一维的向量:
$$V=[v_1,v_2,\dots,v_n]$$
其中$v_i,i \in [1,2,\dots,N]$,代表图像在第$i$行或列上的灰度累积。当然不仅仅是投影曲线,$T$也可以是某一事件中变量的观测值,我们需要研究这个变量的变化规律。
下面给出波峰与波谷的算法:
1,假投影曲线可以表示为$V=[v_1,v_2,\dots,v_n]$。
2,计算V的一阶差分向量$Diff_V$:
$$Diff_v(i)=V(i+1)-V(i),其中i\in {1,2,\dots,N-1}$$
3,对差分向量进行取符号函数运算,$Trend=sign(Diff_v)$,即遍历$Diff_v$,若$Diff_v(i)$大于0,则取1;如果小于0,则取-1,否则则值为0。
$$ sign(x)=\left\{ \begin{aligned}
1& \ \ if\ \ x&0 \\& 0& \ \ if\ \ x=0 \\& -1& \ \ if\ \ x&0&& \end{aligned}
4,从尾部遍历$Trend$向量,进行如下操作:
if\ Trend(i)=0且Trend(i+1)\ge0,则Trend(i)=1 \\
if\ Trend(i)=0且Trend(i+1)&0,则Trend(i)=-1
5,对$Trend$向量进行一阶差分运算,如同步骤2,得到$R=diff(Trend)$。
6,遍历得到的差分向量$R$,如果$R(i)=-2$,则$i+1$为投影向量$V$的一个峰值位,对应的峰值为$V(i+1)$;如果$R(i)=2$,则$i+1$为投影向量$V$的一个波谷位,对应的波谷为$V(i+1)$。
下面我们来结合一个实际的向量值,给中中间结合的计算。
1,$V=[-5,10,10,14,14,8,8,6,6,-3,2,2,2,2,-3]$。
它的曲线图像如下把示,图中红色圈标出了曲线的峰值,而绿字圈标出了图像的波谷位置。
2,计算$V$的一阶差分,我们得到$Diff(V)=[15,0,4,0,,-6,0,-2,0,-9,5,0,0,0,-5]$。
3,对$Diff_v$进行取符号运算,得到向量$Trend=[1,0,1,0,-1,0,-1,0,-1,1,0,0,0,-1]$。
4,对$Trend$作一次遍历,如步骤4。$Trend=[1,1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1]$。
5,对$Trend$做一阶差分,得到向量$R=Diff(Trend)=[0,0,-2,,0,0,0,0,0,2,-2,0,0,0]$。
6,遍历向量$R$,我们就得到了两个峰值点和一个波谷点。
3. 算法原理
其实上述算法的核心思路非常简单,曲线的峰值点,满足一阶导数为0,并且满足二阶导数为负;而波谷点,则满足一阶导数为0,二阶导数为正。
在上面的算法里面,我们首先计算了一阶的导数$Diff_v$,然后我们将其符号化,是因为我们并不关心一阶导数的大小。
然后我们去看那些一阶层数为0的地方,我们发现,那些平台上的点,有些并不是波峰与波谷,然后很多处在上坡与下坡的路上,所以我们将它们的一阶导数设为与它们所在的坡面梯度方向相同。
最后我们再来计算二阶导数时,就会发现只要为2或者-2,所以曲线斜在这个点发生了变化,由正变负或由负变正。找到这些点,也就找到了原曲线中的波峰或波谷点。
下面给出这个算法的C++实现,findPeaks是查找波峰函数,而查找波谷函数则类似,这里没有写在一个函数内。函数接受一个Vecotr&int&的向量,输出为一个vector&int&的位置向量。
void findPeak(const vector&int&& v, vector&int&& peakPositions)
vector&int& diff_v(v.size() - 1, 0);
// 计算V的一阶差分和符号函数trend
for (vector&int&::size_type i = 0; i != diff_v.size(); i++)
if (v[i + 1] - v[i]&0)
diff_v[i] = 1;
else if (v[i + 1] - v[i] & 0)
diff_v[i] = -1;
diff_v[i] = 0;
// 对Trend作了一个遍历
for (int i = diff_v.size() - 1; i &= 0; i--)
if (diff_v[i] == 0 && i == diff_v.size() - 1)
diff_v[i] = 1;
else if (diff_v[i] == 0)
if (diff_v[i + 1] &= 0)
diff_v[i] = 1;
diff_v[i] = -1;
for (vector&int&::size_type i = 0; i != diff_v.size() - 1; i++)
if (diff_v[i + 1] - diff_v[i] == -2)
peakPositions.push_back(i + 1);大神求解,画出立体的水平投影(保留作图线)。_百度知道
大神求解,画出立体的水平投影(保留作图线)。
我有更好的答案
//a.hiphotos.baidu.com/zhidao/pic/item/bcffc1e787d74beaa2见图
采纳率:77%
来自团队:
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 平面图形的水平投影 的文章

 

随机推荐