How to divide gray scale image into 8x8 blocks and access each block separately to apply dct2 on the block

12 vues (au cours des 30 derniers jours)
I want to divide the grayscale image which in my case is the 'cameraman.tif' into 8x8 blocks then run dct2 on each block to
later hide a binary watermark image into each block.
So far I tried blockproc and many other methods but none of them satisfy my needs.
  2 commentaires
dharaneesh govindaraj
dharaneesh govindaraj le 23 Oct 2021
I want to do same process. I dont know how to convert the image and watermark. Please help me by providing code
Image Analyst
Image Analyst le 23 Oct 2021
Modifié(e) : Image Analyst le 23 Oct 2021
@dharaneesh govindaraj, start with running and understanding my attached blockproc() demos. Then adapt them to make the function it runs fft2() instead of whatever I used. But this is essentially what Stephane does below.

Connectez-vous pour commenter.

Réponse acceptée

Stephane Dauvillier
Stephane Dauvillier le 29 Avr 2019
Modifié(e) : Stephane Dauvillier le 29 Avr 2019
file = 'cameraman.tif';
im=imread(file);
imshow(im);
In order to use blockproc you have to use a function that accpts blocksstructure, that's why you need to use something like this
imModified = blockproc(im,[8 8],@(blkStruct) dct2(blkStruct.data));
imshow(imModified)
I hope this answers your question
  2 commentaires
Ari M Salih
Ari M Salih le 29 Avr 2019
But how do I access each block to add the watermarked image to it?
This works but I still need to access them
Stephane Dauvillier
Stephane Dauvillier le 29 Avr 2019
You have a function to add your watermak ?
Let's just say you have your function has followed
function imageWithWatermak = myFunction(imageWithoutWatermark)
...
end
Then you will do
blockproc(im,[8 8],@(blkStruct) myFunction(blkStruct.data));

Connectez-vous pour commenter.

Plus de réponses (1)

KALYAN ACHARJYA
KALYAN ACHARJYA le 29 Avr 2019
Modifié(e) : KALYAN ACHARJYA le 29 Avr 2019
image1=rgb2gray(imread('test.jpg'));
[rows colm]=size(image1);
% pading for make 8 disible, im my case rows 96 and colm 200
% 96 alread divisible by 8, no need modification: 12
% colm 200 no need modification: 25
% Otherwise do zero pading, where required rows or colm, or both
result=dct2(image1,[12 25]);
% This size [12 25] divides the image in 8x8 blocks, each block size is 12x25
imshow(result);
77.png
There may more simpler way also.

Catégories

En savoir plus sur Image Processing Toolbox dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by