2012-06-27 2 views
3

У меня есть матрица a=[[1 2 3]; [4 5 6]; [7 8 9]] и подматрица b=[[5 6];[8 9]].деконволюция между матрицей и подматрицей

Есть ли способ в matlab для деконволюции (a,b)?

Я ищу способ распознавания наличия подматрицы в возможной гигантской матрице. По какой-то деконволюции я ожидаю получить нечто вроде матрицы с нулями вокруг и 1 в том месте, где присутствует подматрица.

В приведенном выше примере 1 в правом нижнем углу.

+2

Это действительно неясно, где сверла вошла в дискуссию. Вы говорите, что у вас есть матрица 'c = conv2 (a, b)', и вы хотите буквально deconvolve? Если вы не можете использовать более точный термин, чем «deconvolve»? Кажется, что это просто найти подматрицу внутри матрицы. –

+0

O.K. В одном есть 2 проблемы. Первая из них - о матлабе.Если у меня есть 'c = conv2 (a, b)', как я могу восстановить b путем deconvolving c и a? Второй - более «философский». Предположим, что 'a' является результатом взаимодействия (свертки) между объектами. Предположим, вы не знаете эти объекты. Просто смоделируйте представление одного из них. Я хотел бы применить своего рода деконволюцию между 'a' (большой картиной) и моим гипотетическим представлением объекта. Моя цель - получить матрицу (с тем же размером, что и 'a'), с теми, где/если объект может присутствовать в' a'. –

+1

К сожалению, ни один из этих двух вопросов не встретился явно. Задавайте более точные вопросы, если вы действительно хотите получить ответы. –

ответ

4

Существует лучший информация here.


Давайте поговорим о 1D deconvolution для простоты.

Ваш сигнал может быть представлен как вектор, а свертка - умножением на тридиагональную матрицу.

Например:

Ваш вектор/сигнал:

V1 
    V2 
    ... 
    Vn 

Ваш фильтр (свертка элемент) является:

[b1 b2 b3]; 

Таким образом, матрица nxn: (Пусть оно называется A):

[b2 b3 0 0 0 0.... 0] 
[b1 b2 b3 0 0 0.... 0] 
[0 b1 b2 b3 0 0.... 0] 
..... 
[0 0 0 0 0 0...b2 b3] 

Свертка:

A*v; 

И де-свертка

A^(-1) * (A) * v; 

Очевидно, что в некоторых случаях де-свертка не представляется возможным. Тогда у вас будет единственное число A. Но если A^-1 существует, его необходимо вычислить и применить к нему.


Для 2D-футляра это немного сложнее, но идея такая же.

+0

'A' выглядит как матрица Теплица. Известно, что если мы имеем два сигнала: 'a' и' b', 'c = conv2 (a, b) = A * b'', где' A' - это теплицевая матрица 'a'. Проблема в том, что # столбцов 'A' должны быть равны # столбцам' b', а 'A' ​​должен быть квадратным, если мы хотим деконволюровать' c, A' на 'b '= A^-1 * c'. Мне не так ясно, как манипулировать этими размерами ... –

+1

@ NasserM.Abbasi, A - квадрат - это размер сигнала в обоих измерениях. Размер фильтра - это количество ненулевых диагоналей. –

2

Если вы хотите найти присутствие или вероятность наличия маленькой матрицы внутри другой, тогда вы ищете корреляцию, а не деконволюцию.

Простейшим методом было бы использовать normxcorr2, которые возвращают матрицу значений [-1.1], где 1 означает пиксель, в котором найдена малая матрица.

Недостаток/преимущество заключается в том, что normxcorr2 не чувствителен, чтобы получить, то есть, если вы ищете [1 2 3 4], то вы также можете найти [2 4 6 8]

Смежные вопросы