0

I try to convert 2d image to 1d and the filter as well than I want to filter that image with the 1d filter and getting the same corresponding pixel responses as in the 2d convolving.

I have done

I1 = I(:)
filter1 = filter(:);
response = imfilter(I1,filter1,'conv')
response2d = imfilter(I,filter,'conv');

but response and response2d are not same with the matching entries.

How could solve that problem? Any suggestion?

4

2 回答 2

1

一般情况下是不可能的。然而,对于一类非常重要的过滤器内核,它不仅是可能的,而且非常有效。这是所谓的可分离内核的类别,它包括均值(也称为框模糊)滤波器、高斯模糊和其他所有内核,其矩阵K可以表示为两个向量的外积K = u * v ,即具有与 K 一样多的行的列向量u和具有与K一样多的列的行向量v的乘积。

如果是这种情况,图像I与核K的 2D 卷积在数学上等于两个 1D 卷积的序列,即I的列与u的卷积,然后是与结果的v的卷积第一次卷积。在此处查看有关可分离过滤器的更多信息。

如果您使用的是通用 2D 内核K,并且不知道它是否可分离,则测试它的方法是计算其奇异值分解 ( SVD ) K = U * S * V,您可以使用许多图书馆中的任何一个。然后,您会看到除了第一个 S(1,1) 之外,矩阵S的所有对角项(K奇异值)是否都非常接近于零。SVD 库通常会按从大到小的排序顺序生成奇异值,因此您只需验证S(1,1) > 0S(2,2) / S(1,1) << 1。如果是这样的话,那就是u == U(:,1) , U的第一列,v == V(1,:),矩阵V的第一行。

于 2013-03-19T13:09:21.580 回答
1

卷积 2D 信号在数学上不等于卷积 1D 信号。所以它不能产生相同的结果。

例如,如果您有一个均值过滤器,假设:

A = [1/9 1/9 1/9;
    1/9 1/9 1/9;
    1/9 1/9 1/9]

然后对于一个像素P(i,j),结果强度将受以下值的影响:

R(i,j) = 
1/9 * 
( P(i-1,j-1) + P(i-1,j) + P(i-1,j+1) +
P(i,j-1) + P(i,j) + P(i,j+1) +
P(i+1,j-1) + P(i+1,j) + P(i,j+1) 
)

如果将滤波器内核和信号按列展开,那么,如果我们说(为简单起见)像素P(i,j)位于行中间的某个位置,而不是靠近末端,那么新值将是:

R(i,j) = 
1/9 * (
R(i-4,j) + R(i-3,j) + R(i-2,j) + R(i-1,j) +
R(i,j) +
R(i+1,j) + R(i+2,j) + R(i+3,j) + R(i+4,j)
)

当然,在新的 1D 信号中,索引不会是二维 的,而是因为信号被分散而R(i,j)变为二维的。R( i + j*imageHeight )

很明显,第二种情况下每个像素的值是使用不同的邻居计算的,因此对于任何任意图像都不能相等,可能仅适用于具有特定周期信号的特殊场合。

于 2013-03-19T10:01:59.783 回答