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

9 次查看(过去 30 天)
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 个评论

请先登录,再进行评论。

采纳的回答

Stephane Dauvillier
编辑:Stephane Dauvillier 2019-4-29
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 个评论
Stephane Dauvillier
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));

请先登录,再进行评论。

更多回答(1 个)

KALYAN ACHARJYA
KALYAN ACHARJYA 2019-4-29
编辑:KALYAN ACHARJYA 2019-4-29
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.

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by