(۱۳۹۲/۰۴/۰۱, ۰۱:۵۸ ق.ظ)'saba' نوشته: سلام. اگر ضریب همبستگی رو بین پیکسل های یک تصویر بخواهیم باید چه کار کرد.من اول ضریب همبستگی رو برای تصویر اصلی می خوام که باید عددی نزدیک1 باشه وبعد ضریب رو برای تصویر رمز شده می خوام که باید نزدیک 0 باشه.آیا در متلب تابعی برای این کار وجود داره یا نه؟
سلام.
من در متلب جستجو کردم اما دستور خاصی برای این مورد پیدا نکردم. تنها موردی که به نظرم رسید این است که با دستور corrcoef همبستگی نقاط را نسبت به هم به دست آوریم که یک ماتریس با اندازه ماتریس اصلی به ما می دهد. سپس تمامی مقادیر این ماتریس را جمع کرده و تقسیم بر تعداد نقاط کنیم. با این روش، معیاری برای سنجش همبستگی نقاط تصویر خواهیم داشت.
کدهای متلب :
کد:
clear all
close all
clc
A=imread('image.png');
A=double(A);
B=corrcoef(A);
B(isnan(B))=0;
s=size(B);
sum=0;
for nn=1:s(1)
for mm=1:s(2)
sum=sum+B(nn,mm);
end
end
sum;
final=sum/(s(1)*s(2))
سه خط اول برنامه متلب بالا، برای عدم تداخل برنامه با برنامه های متلبی است که قبلا اجرا شده اند.
با دستور imread یک تصویر با نام image.png را خوانده ایم و مقادیر آن را در متغیر A ذخیره کرده ایم.
با دستور double ، مقادیر A را به double تبدیل کرده ایم تا بعدا برای استفاده از دستور corrcoef به مشکل برنخوریم.
دستور corrcoef یک ماتریس را بر می گرداند که مقادیر آن، میزان همبستگی پیکسل های (نقاط) مختلف تصویر را به ما می دهد.
خط مربوط به دستور isnan ، مهم می باشد. وقتی ماتریس B ساخته می شود، تعدادی از عناصر آن دارای مقدار NaN (یک عدد نیست - Not a Number) خواهند بود زیرا مقادیر آنها به گونه ای می باشد (دارای ابهام) که متلب به جای آن، NaN در ماتریس قرار می دهد. بنابراین ما برای جمع کردن عناصر ماتریس B ، با مشکل وجود NaN روبرو می شویم. پس باید آنها را تبدیل به صفر کنیم. دستور isnan محل NaN ها را به ما می دهد و سپس با عبارتی که نوشته ایم، آنها را تبدیل به صفر می کنیم.
در ادامه برنامه، مجموع عناصر ماتریس B را در متغیر sum ذخیره می کنیم و سپس با تقسیم این مجموع بر تعداد عناصر ماتریس B ، عدد نهایی را در متغیر final ذخیره خواهیم کرد.
من این برنامه را برای یک تصویر اجرا کردم و نتیجه زیر به دست آمد :
این شد معیاری برای سنجش همبستگی نقاط یک تصویر، البته من دیدم که در اینترنت معیارهای گوناگونی مطرح شده است اما اصول همه تقریبا یکسان است.
مثلا در جایی دیدم که چنین اطلاعاتی نمایش داده شده بود (البته روش به دست آوردن رو نگفته و تنها گفته که به این شکل هست) :
مشاهده می کنید که سه ضریب همبستگی برای جهت های افقی، عمودی و قطری و برای دو حالت تصویر به صورت معمولی (plain-image) و تصویر به صورت رمز شده (ciphered-image)، ذکر شده است.
لینک اون رو هم براتون میگذارم :
http://stackoverflow.com/questions/16095...-in-matlab