Я новичок в Matlab, и у меня есть задание, которое требует нанесения водяных знаков на изображение с использованием преобразования DCT:
- Прочитайте цветное изображение Lin.jpg и примените DCT.
- Превратите logo.jpg (водяной знак) в двоичный код и увеличьте его силу в десять раз, а затем добавьте его к коэффициенту преобразованного изображения Lin.
Вот два изображения:
У меня три вопроса:
- Я должен разделить Lin.jpg на блоки 8x8 и logo.jpg на блоки 2x2 или в этом нет необходимости?
- что это означает: в десять раз больше его силы? Это просто умножить на 10?
- Как я могу получить коэффициент преобразованного изображения Lin.jpg?
Вот что я пробовал:
img = imread('Lin.jpg');
wImg = imread('njit_logo.jpg');
wImgBinary = imbinarize(wImg) * 10;
[rows, cols] = size(img(:,:,1));
[Wrows, Wcols] = size(wImgBinary);
% make the watermark image as large as the original
watermark = zeros(size(img), 'uint8');
for column = 1:cols
for row = 1:rows
watermark(row, column) = wImgBinary(mod(row,Wrows)+1, mod(column,Wcols)+1);
end
end
watermark = watermark(1:rows, 1:cols);
% apply dct and add with watermark at each channel
for i = 1:3
imgDct = dct2(img(:,:,i));
C = imgDct + double(watermark);
Iw(:,:,i) = round(real(idct2(C)));
end
IIw = uint8(Iw);
figure, imshow(IIw), title('watermarked image');
dct2()
, примененного к изображению, которое является их частотными коэффициентами. В 10 раз больше силы не знаю, умножение на 10 звучит правильно. - person MichaelTr7   schedule 12.11.2020