вопрос заключается в том, что ваши данные ввода изображения I
имеет значения между 0
и 255
и имеет тип данных uint8
. После свертки выход равен double
и по-прежнему имеет значения между 0
и 255
.
по умолчанию для imshow
когда вход типа double
заключается в масштабе цветовых осей таким образом, что 0
черный и белый 1
. Ваше изображение отображается почти полностью как белый, так как большинство ваших значений - >1
.
Чтобы исправить это (так как вам нужно пределы 0
в 255
), вы можете указать диапазон значений для использования в качестве второго входа в imshow
imshow(C, [0 255])
Или вы можете просто представить пустой массив в качестве второй вход, так что цвет, которые автоматически масштабируется экстремумы входного изображения
imshow(C, [])
в качестве побочного сведению, вы можете использовать conv2
, а не convn
, поскольку вы сим выполняющий двумерную свертку. conv2
требует, чтобы все входы были числами с плавающей запятой, поэтому сначала конвертируем M
и I
в double
.
C = conv2(double(I), double(M), 'same');
В качестве альтернативы, вы можете использовать imfilter
, если у вас есть изображение Processing Toolbox (как @rayryeng предложил) и не придется беспокоиться о литье M
и I
в double
C = imfilter(I, M);
Он работал, спасибо ! Но мне интересно, почему функция conv не использует тип данных uint8 вместо double? Или для этой цели существует специальная функция? – Burak
@Burak 'conv2' принимает только данные типа double или' single'. Это указано в документации. Вот почему Suever передал данные «double». Если у вас есть панель инструментов обработки изображений, вы можете использовать 'imfilter', который принимает почти все типы входов. – rayryeng
@rayryeng Я знаю, прочитайте меню справки для функции conv. Я спросил, почему? Есть ли какая-то особая причина? – Burak