MatLab Daubechies Фильтр цветного изображения с нуля - без использования предустановленных функций
Это мой первый пост. Я надеюсь, что кто-то может помочь мне начать. Так что я работаю над обработкой изображений для проекта класса. Мы легко начали с создания функции преобразования Хаара с нуля, которая была довольно простой, а затем применили ее к предустановленным изображениям, таким как cameraman.tif. Тем не менее, этот образец изображения находится в градациях серого и квадратной матрицы.
Теперь мы сделали большой скачок, и мы должны применить фильтр к любому прямоугольному цветному изображению. Я понимаю, что если я imread(picture)
он создаст матричную матрицу с тремя значениями, представляющими красный, зеленый и синий (RGB). Я также понимаю, что, в принципе, я должен использовать for
цикл, чтобы пройти через каждый канал цвета. Тем не менее, это подводит меня к вопросу о том, как создать его для разных каналов и собрать изображение обратно.
Я получил здесь несколько удивительных ответов и смог восстановить пример с женщиной и корзиной с фруктами, но, к сожалению, все они используют предустановку DWT
функция, которой я не должен.
Окончательный код должен выглядеть следующим образом: 1) Спросите пользователя, сколько итераций желательно:
pic = input('What picture would you like? Type "1" for an example or a URL ');
2) Спросите пользователя о пороге
t = input('Threshold?');
3) Спросите пользователя, сколько итераций (1-3)
i = input('How many iterations do you want? Choose 1-3. ');
В качестве примера изображения я выбрал прямоугольное растровое изображение, потому что оно еще не было сжато, и в качестве простого идентификатора использовалось "1":
if pic ==1;
A = imread ('http://readingeagle.com/BlogUploads/11/Birds%20in.bmp');
else A = imread(pic) ;
end
%[m,n]=Matrix dimensions, c=channels
[m,n,c]=size (A) ;
%plot original
imshow (A);
Теперь нам нужно выполнить вейвлет-преобразование Добчехи с тем количеством итераций, которое указал пользователь, устанавливая значения за пределами абсолютного значения порога равным нулю. Перед реконструкцией изображения.
Я надеюсь, что дал достаточно информации, пожалуйста, поправьте меня, если я уже ошибся (надеюсь, что нет). Мой код начинает ломаться каждый раз, когда я реализую циклы и пытаюсь обратиться к каналам. Просто для справки приведем преобразование Хаара, которое работало для исходного изображения cameraman.tif:
%HWTM - Haar Wavelet Transform Matrix
function W = HWTM(N)
while mod(N,2) ~= 0;
N = N-1;
end
W=zeros(N);
for k=1:N/2
W(k,2*k)=1/2;
W(k,2*k-1)=1/2;
W(N/2+k,2*k)=1/2;
W(N/2+k,2*k-1)=-1/2;
end
end
Бесконечно благодарен!