مساعدة !


(system) #1

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

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

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


كيف اعمل watermark على الصور الرمادية
#2

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

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


(system) #3

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

Detection of Copy-Move Forgery by Block Matching

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

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

لكن دون جدوى

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

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


#4

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

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

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


(system) #5
%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

(system) #6
%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

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


(system) #7

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

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


#8

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

هذا الكود يمكنه عمل التقسيم ولكن يوجد به بعض الاضافات الاخرى لا اعلم اذا كنتى تحتاجى لها ام لا
ولكنك لا تحتاجى الى عمل التقسيم خطوة مستقله يمكنك فقط عمل بلوك 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 وعند وجودة اى صفين بها متشابهين فهذا دليل على وجود تشابه فى بلوكين ودليل على وجود تزوير


(Ahmed) #9

السلام عليكم

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

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

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


#10

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