Вы не понимаете, что делаете!
Это явно домашнее задание, поэтому я не предоставляю полный код. Вы делаете свертку изображения, что вы можете сделать с помощью лучшего кода (fft
, conv2
, imfilter
и т. Д.), Но я предполагаю, что вы делаете это для обучения.
Сначала сядьте со своими конспектами и узнайте, что такое фильтрация. Когда вы применяете фильтр к пикселю (первые 2 цикла предназначены для выбора каждого пикселя на изображении), вы хотите умножить выбранный вами фильтр на этот пиксель и на все окружающие пиксели и накапливать результат этого в выходное изображение.
Как только вы находитесь в определенном пикселе (row
, col
), вы выполняете итерацию вокруг всех соседних пикселей (смещение rowindex
, colindex
). Для каждого из них вы хотите умножить текущий пиксель на фильтр в этом конкретном месте , то есть на значение 1, и добавить его к результату. Зависит от фильтра, он будет делать что-то другое. В вашем случае фильтр с тем же значением будет делать среднее. Вам не нужно использовать функцию mean2
, математика, которую вы применяете, выполняет фильтрацию .
Короче говоря, эта строка неверна:
img_4(row,col) = mean2(double(working_img(row+rowindex,col+colindex)) * filter(1:5,1:5));
И использование mean2
и индекс для переменной filter
.
Видео, объясняющее свертку: https://www.youtube.com/watch?v=C_zFhWdM4ic