史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

分离卷积:第2部分

10月份我介绍的概念过滤分离性。一个二维滤波器年代据说是可分的,如果它可以写成两个一维的卷积过滤器吗vh:

我接着说,“下次”解释如何确定一个给定的过滤器是可分的。好吧,我猜我走弯路,但我现在回到正题上来。

最早这个问题给我一个机会在MathWorks游荡到公司的创始人之一克里夫的办公室,寻求建议。我问:“我怎么能确定一个矩阵是两个向量的叉积?”Cleve was very helpful, as he always is, although I was a little embarrassed afterward that I hadn't figured it out myself. "Go look at the排名功能,”克里夫告诉我。

当然可以。如果一个矩阵是两个向量的外积,其等级是1。这是关键的代码行排名:

dbtype十五19排名
15 s =圣言();16如果输入参数个数= = 1 17 tol = max(大小(A)) * eps (max (s));18日结束19日r = (s > tol)总和;

这是测试:的秩一个非零奇异值的数量吗一个,一些数值宽容的基础上每股收益和的大小一个

让我们尝试用一些常见的过滤器。

一个平均过滤器应该是显而易见的:

平均=的(5,5)/ 25;等级(平均)
ans = 1

Sobel内核:

sobel = [1 0 1;2 0 2;1 0 1];排名(sobel)
ans = 1

二维高斯函数是唯一的径向对称函数,也可分:

高斯= fspecial (“高斯”);排名(高斯)
ans = 1

磁盘并非可分:

磁盘= fspecial (“磁盘”);等级(磁盘)
ans = 5

我们怎么确定外积向量?答案是回到圣言会函数。这里有一个文档的片段:[U, V] =圣言(X)产生一个对角矩阵年代相同的尺寸X在减少订单,非负对角元素,酉矩阵UVX = U * * V '

一个1级矩阵只有一个非零奇异值,U * * V”就变成了U (: 1) * S (1,1) * V (: 1)”。这基本上是外产品我们正在寻找。因此,我们想要的第一列UV。(我们也要记住使用非零奇异值作为比例因子)。

让我们试试这个高斯滤波器。

[U, V] =圣言(高斯)
U = -0.1329 0.9581 -0.2537 -0.9822 -0.1617 -0.0959 0.0000 0.6420 -0.1329 0.2364 0.9625 S = 0 0 0 0 0 0 0.0000 V = -0.1329 -0.6945 -0.7071 -0.9822 0.1880 0.0000 -0.1329 -0.6945 0.7071

现在的水平和垂直的向量从第一列UV

v = U (: 1) * sqrt (S (1,1))
v = -0.1065 -0.7870 -0.1065
h = V (: 1)‘* sqrt (S (1,1))
h = -0.1065 -0.7870 -0.1065

我选择,有点任意分割比例因子,(1),“同样”vh

现在检查以确保工作原理:

高斯- v * h
ans = 1.0 e - 015 * -0.0243 -0.1527 -0.0243 -0.0139 -0.1110 -0.0139 -0.0035 -0.0035 0

除了正常的浮点舍入的差异,高斯v * h是相等的。

你可以找到类似的代码在MATLAB函数filter2以及图像处理工具箱函数imfilter




使用MATLAB®7.3发表

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。