كود تقسيم الصوره

السلام عليكم ورحمة الله
ابغى منكم مساعدتي بهذا الكود
المشكله عندي في كود تقسيم الصوره هينا عندي بس يعرض لي اخر كود عمله
انا ابغاه يعرض لي اي كود احدده و اطلبه منه يعني مثلا لما اقول له اعرض لي البلوك 64 او اي بلوك ثاني يعرضه لي
ومشكوورين


%read the orgenal image and resize to 512*512
w=imread('bkg12fe0.jpg');
w=imresize(w,[512 512]);
k=size(w);
figure(1)
imshow(w)
title('Origianl image')
%convert the RGB to grat
a=rgb2gray(w);
figure(2)
imshow(a)
title('gray image')
% Dividing into 8x8 blocks
[r c]=size(a)
x=8;
count=0;
for i=1:x:r
for j=1:x:c
%get one block
block=double(a(i:1:min(i+7,c),j:1:min(j+7,r)));
count=count+(r/x);
j=dct2(block);
end
end
figure(3)
imshow(j)
% The discrete cosine transform
j=dct2(block);
figure(4)
imshow(j)
%The encoding 
for i=1:k
Bi=dct2(j);
mi=0;
if Bi(1,1)>Bi(1,8);
temp=Bi(1,1);
Bi(1,1)=Bi(1,8);
Bi(1,8)=temp;
end
%else
if Bi(1,1)<Bi(1,8);
temp=Bi(1,1);
Bi(1,1)=Bi(1,8);
Bi(1,8)=temp;
end
 

end

for i=1:x:r
for j=1:x:c
%get one block
block=double(a(i:1:min(i+7,c),j:1:min(j+7,r)));
count=count+(r/x);
j=dct2(block(;
end
end

غيري الكود السابق ليكن كالتالي


ttt=1;
for i=1:x:r
for j=1:x:c
%get one block
block(:,:,ttt)=double(a(i:1:min(i+7,c),j:1:min(j+7,r)));
count=count+(r/x);
j=dct2(block(:,:,ttt));
ttt=ttt+1;
end
end

انا لم اجربه عندي
جربيه :

لو اردتي استدعاء البلوك الثامن اكتبي :

block(:,:,8)

وين الرد ؟؟؟؟

كل شي تمام يا اخي أو اختي ؟؟؟

جزاك الله خيرا مهندس سعود

الله يعطيك العافيه مهندس سعود
البرنامج ماشي معاي بس مايتنفذ عند الخطوه هذي

j=dct2(block(:,:,ttt));

يقول خطاء :frowning:

انسخيلي الخطأ بالضبط كما هو

واظن ان المتغير
j
يجب ان يتغير لأنه نفس العداد

j=dct2(block(:,:,ttt));

اكتبي بدله
اي شي

قصد بدل
j

>> roro1
r =
   512

c =
   512
??? Index exceeds matrix dimensions.
Error in ==> roro1 at 30
j=dct2(block(:,:,ttt));
>> 

كذا طلع لى الكومند وندوز
نفذت زي ماطلبت بالضبط
الله يعطيك العافيه

المهندس سعود
الخطاء المقصود فيه

% The discrete cosine transform
n=dct2(block(:,:,ttt));
figure(4)
imshow(n)

اللى بتعرض لنا الشكل الرابع لبلوك اللى عملنا له دي سي تي

اخي العزيز وين ما في

j=dct2......

أو

imshow(j)

لتصبح

n=dct2....

و

imshow(n)

هذا البرنامج كامل بس لسى الخطاء موجود

 
%read the orgenal image and resize to 512*512
w=imread('bkg12fe0.jpg');
w=imresize(w,[512 512]);
k=size(w);
figure(1)
imshow(w)
title('Origianl image')
%convert the RGB to grat
a=rgb2gray(w);
figure(2)
imshow(a)
title('gray image')
% Dividing into 8x8 blocks
[r c]=size(a)
x=8;

count=0;
ttt=1;
for i=1:x:r
for j=1:x:c
%get one block
block(:,:,ttt)=double(a(i:1:min(i+7,c),j:1:min(j+7,r)));
count=count+(r/x);
j=dct2(block(:,:,ttt));
ttt=ttt+1;
j(:,:,ttt)=dct2(block(:,:,ttt));
end
end
figure(3)
imshow(j)
% The discrete cosine transform
n(:,:,ttt)=dct2(block(:,:,ttt));
figure(4)
imshow(n)
%The encoding 
for i=1:k[/color]
Bi=dct2(j);
mi=0;
if Bi(1,1)>Bi(1,8);[/color]
temp=Bi(1,1);
Bi(1,1)=Bi(1,8);
Bi(1,8)=temp;
end
%else
if Bi(1,1)<Bi(1,8);
temp=Bi(1,1);
Bi(1,1)=Bi(1,8);
Bi(1,8)=temp;
end


end


هذا اللي طلع لي بالكومند ويندوز

r =
   512

c =
   512
??? Index exceeds matrix dimensions.
Error in ==> nada1 at 32
j(:,:,ttt)=dct2(block(:,:,ttt));

انتى ما سويت اللي قلتلك عليه

الكود التالي شغال وتمام

%read the orgenal image and resize to 512*512
w=imread('bkg12fe0.jpg');
w=imresize(w,[512 512]);
k=size(w);
figure(1)
imshow(w)
title('Origianl image')
%convert the RGB to grat
a=rgb2gray(w);
figure(2)
imshow(a)
title('gray image')
% Dividing into 8x8 blocks
[r c]=size(a)
x=8;

count=0;
ttt=1;
for i=1:x:r
for j=1:x:c
%get one block
block(:,:,ttt)=double(a(i:1:min(i+7,c),j:1:min(j+7,r)));
count=count+(r/x);
dct_of_block(:,:,ttt)=dct2(block(:,:,ttt));
ttt=ttt+1;
end
end
إعجاب واحد (1)

هذا الكود ينتج متغيرين
احدهما هو
block
وهو مكون من 4069 مصفوفه (بلوك 8ّ*8)

والثاني اسمه
dct_of block
وهو مكون من 4069 مصفوفة تمثل
dct
لكل بلوك

الكود اللي بعذ كذا هو خاطئ لنك يجب ان تحدد له البلوك أو الدي سي تي الذي تريد ان ترسمه في شكل 3 و 4
مثلا يمكن ان نختار الدي سي تي للبلوك العاشر
نكتب الاتي

figure(3)
imshow(dct_of_block(:,:,10)
إعجاب واحد (1)

صحيح الكود اللى نعمله له دي سي تي نعمله كونتزيشن
فالخطاء يكون من بعد الصوره االثالثه بالتالى لا تضهر الصوره الرابعه
لماذا احدد له رقم بلوك معين لماذا لايكون رقم البلوك كما فى البوكات السابقه
؟

السطرين اللي بعديهم ما الهم داعي لانهم تكرار
اقصد هذول الاسطر

% The discrete cosine transform
n(:,:,ttt)=dct2(block(:,:,ttt));
figure(4)
imshow(n)

يعني اشطبهم

إعجاب واحد (1)

من وين اجى الرقم 4096
انا اجاوبك
حجم الصورة هو 512 512
وحجم البلوك هو 8
8
قسمهم على بعض يطلع عدد البلوكات
وهو 4096

بقي عملية الاينكودنغ

انت اشرحها الي كويس وانا ابرمجها

تمام