مساعدة !

السلام عليكم ورحمة الله وبركاته

ممكن مساعدتي بكود يعمل على المقارنه بين بلوكات صورة بعد تقسيمها اذا وجد بلوكين متشابهه يظهر ان الصورة مزيفة

ساعدني كود للتقسيم تم طرحه هنا لكن المقارنة لم استطيع عملها

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

وارفقت لك ملف مفيد حول هذا الموضوع يمكنك قراءة جديدة واختيار الطريقة المناسبة وفهمنا نظريا ومن ثم يمكن تطبيقها على الماتلاب

شكرا جزيلا لك اخي لفاضل

Detection of Copy-Move Forgery by Block Matching

هذه هي الطريقه الموجودة لدي والمطلوبة

لكن للاسف حاولت عدة مرات تطبيقها على الماتلاب

لكن دون جدوى

قرابة الشهر وانا احاول كتابته ممكن السبب يعود لمعرفتي السطية بالماتلاب

رغم تكثيف الدروس لمحاولة انجاز ولو شيء بسيط

الالجورثم الذى تقومى بكتابته هو الجورثم متقدم لمعالجة الصور ويجب ان تكونى على دراية جيدة بالماتلاب وبمعالجة الصور
اما معرفتك السطحية بالماتلاب فلن تفيد وليس الهدف من اعطاءك هذا الموضوع فى الكلية هو انهم يريدون هذا الالجورثم ولكن هو ان تتعملى الماتلاب ومعالجة الصور
فاذا عملتى البرنامج بدون ان تتعلمى الماتلاب فلن يكون هناك اى فائدة على الاطلاق

سأعطيتك فكرة بسيطة عن كيفية عمله ويمكنك البدء بها وعمل الالجورثم البسيط Exact match وبعدها يمكنك تحسينه واضافة جزء ال DCT اليه

ونفرض انك عرفتى كيفية تقسيم الصورة الى بلوكات والان كل بلوك من هولاء سيكون نافذة يتم تمريرها على الصورة كلها من البداية حتى النهاية ومقارنه قيم النافذة مع قيم الصورة وبعدها انتقلى الى البلوك رقم 2 وسيكون هو الان النافذة وقومى بتمرريها على الصورة كلها ايضا وكهذا حتى الانتهاء من جميع البلوكات الموجودة

%read the orgenal image and resize to 512*512
w=imread('d:\g\gg.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
%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;
end
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

هذا كود التقسيم كيف اقارن بين البلوكات

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

بحيث اذا كان هناك بلوك يشبه الاخر تكون الصورة مزيفه

واضح انك نقلتى الكود بدون اى تعديل عليه ولم تفهمى فكرة العمل جيدا

هذا الكود يمكنه عمل التقسيم ولكن يوجد به بعض الاضافات الاخرى لا اعلم اذا كنتى تحتاجى لها ام لا
ولكنك لا تحتاجى الى عمل التقسيم خطوة مستقله يمكنك فقط عمل بلوك B×B وهذا البلوك فى كل مرة يتحرك على الصورة من اول بيكسل حتى اخر بيكسل عن طريق 2 فور لوب واحدة للاعمدة والاخرى للصفوف

وفى كل مرة لديك بلوك B×B بالقيم المختلفة للصورة تقومى بحفظ قيم هذه البيكسل وادخالها فى المصفوفة A

مثلا لو لديك بلوك 3 فى 3 ويحتوى على البيكسل الاتية
1 2 3
5 4 6
3 4 3

فان المصفوفة A سيوجد بها صف يحتوى على الاتى

3 2 1 6 4 5 3 4 4 

وهذه المصفوفة A وتحتوى على عدد اعمدة يساوى B تربيع وفى هذه الحالة 9 وصفوفها تساوى عدد البلوكات الموجودة

وعند الانتهاء من جميع البلوكات الموجودة فى الصورة يكون لديك المصفوفة A
وبعدها يمكنك ترتيبها lexicographically وعند وجودة اى صفين بها متشابهين فهذا دليل على وجود تشابه فى بلوكين ودليل على وجود تزوير

السلام عليكم

لقد شرح لك الاخ المدير الامر بالتفصيل

هذه الطريقة
Detection of Copy-Move Forgery by Block Matching
متقدمة قليلا في معالجة الصور لكنها تبقى سهلة التطبيق في ماتلاب
لانها تعتمد على المقارنة فقط دون مفاهيم رياضية اخرى

يمكنك البدء بالطريقة السهلة
Exact match
والتي تعتبر بداية للطريقة النهائية باستخدام
DCT coefficients

جزاك الله خيرا DzArticles على التوضيح وللعلم فالطريقة التى شرحتها هى Exact match