Проблема с массивом типа "DAMPAR" в MATLAB deconvolucy.m - PullRequest
0 голосов
/ 18 апреля 2009

Ниже приведен фрагмент кода, из которого я пытался редактировать, MATLAB deconvolucy .
похоже, что у DAMPAR есть проблема, когда тип класса не совпадает.

Может кто-нибудь помочь или кто-нибудь знает лучший способ вызвать изображение, которое я (как в deconvolucy.m) допустил бы?

[возможно, мне следует преобразовать изображение в массив перед использованием? как мне это сделать?]

// - код - //
I = imread ('C: \ Users \ Lem \ Desktop \ III \ TIFF \ 69_M.000.tif', 'tif');
класс (I)
PSF = fspecial ('gaussian', 7,10);
V = .0001;
BlurredNoisy = imnoise (imfilter (I, PSF), 'gaussian', 0, V);
WT = нули (размер (I));
WT (5: конец-4,5: конец-4) = 1;
J1 = деконвлюц (Размытый шум, PSF);
J2 = деконвлюц (Размытый шум, PSF, 20, кв. (В));
J3 = деконвлюц (Размытый шум, PSF, 20, кв. (V), WT);
//...
...
...//

??? Ошибка при использовании ==> deconvlucy> parse_inputs при 316
В функции deconvlucy DAMPAR должен быть того же класса, что и входное изображение.

Ошибка в ==> деконвлюкции при 102
[J, PSF, NUMIT, DAMPAR, READOUT, ВЕС, SUBSMPL, sizeI, классифицирует, numNSdim] = ...

1 Ответ

2 голосов
/ 18 апреля 2009

Вы прочитали изображение, используя imread. Так что, вероятно, поступит как uint8? Помощь для imread говорит, что результатом будет целое число некоторого порядка для изображения tiff. Какого класса я был, когда его вернули?

Затем вы отфильтровали изображение. Похоже, что imfilter вернет целочисленное изображение для целочисленного входного изображения.

Далее вы добавляете шум, используя imnoise. Из интерактивной справки для imnoise он внутренне преобразует изображение в [0,1] (двойное) число, добавляет гауссов шум, а затем преобразует обратно в целочисленный вывод. Таким образом, ваше размытое изображение должно быть целочисленным, вероятно, из элементов uint8.

В справке по fspecial говорится, что он вернет вывод с двойной точностью для PSF.

Вы вызвали deconvolucy только с двумя аргументами, поэтому он использует значение по умолчанию для DAMPAR. (Я буду утверждать, что это не должно сработать здесь. Автор деконволюции, по-видимому, не предоставил значение по умолчанию, которое было согласовано по типу с входными данными.)

Не зная достаточно о IPT или деконволюции, я мог бы сначала предложить повторно запустить этот код, используя два разных вызова.

J1 = deconvlucy(BlurredNoisy,PSF,[],0);

J1 = deconvlucy(BlurredNoisy,PSF,[],uint8(0));

Если один из этих вызовов не устранил проблему, это говорит о том, что деконволюция ожидает двойной ввод для изображения, BlurredNoisy. Онлайн-справка по деконволюции не была здесь конкретной. Это говорит только о том, что я могу быть N-мерным массивом или массивом ячеек. Далее в справке он вызывает результат числового массива. Поэтому я считаю, что изображение для деконволюции, как ожидается, будет изображением с плавающей запятой. (По моим стандартам, это недостаток в помощи.)

Тогда я бы, вероятно, попытался увеличить ваше изображение до [0,1] в двойном размере. Это только предположение однако. Так что-то вроде:

BlurredNoisy = double(BlurredNoisy)/255;

Предполагается, что ваше изображение изначально было в классе uint8.

...