PDA

View Full Version : مومنت ( moment ) چیست و چگونه پیاده سازی آن در پردازش تصویر ؟؟؟



crackestan
سه شنبه 27 دی 1390, 10:20 صبح
با سلام خدمت تمامیه دوستان عزیز
من در حال تحقیق برای تهیه یک مقاله در زمینه پردازش تصویر هستم .
به کمک یکی از اساتید متوجه شدم که باید از مامنت که در پردازش تصویر استفاده میشه ، استفاده کنم .
متاسفانه هیچ مقاله یا موضوع فارسی ای درباره این مبحث پیدا نکردم .
آیا شما دوستان عزیز مقاله ای و یا متن فارسی ای که بتونه درباره مامنت ها بهم کمک کنه ، دارید ؟؟؟
واقعا نیاز دارم که یه سری تحقیقات کلی به زبان فارسی روی مامنت انجام بدم چون هرچی بیشتر مقاله انگلیسی میخونم ، بیشتر گیج میشم . خصوصا قسمتهای ریاضی ش .
یه درخواستی هم دارم ، که آیا کسی از دوستان میتونه ، در پیاده سازی مامنت من رو راهنمایی کنه ؟؟؟
واقعا این پیاده سازی مامنت ، یک کمک اساسی بهم میکنه . واقعا خیلی من رو جلو میندازه .
اگر کتابی در مورد این موضوع هست که به زبان فارسی باشه ، بهم بگید تا تهیه کنم .
پیشا پیش از کمک همگیه دوستان سپاس گذارم .

مصطفی ساتکی
سه شنبه 27 دی 1390, 10:55 صبح
به این لینک (http://www.7khatcode.com/260/%D9%86%D8%AD%D9%88%D9%87-%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D9%85%D9%88%D9%85%D9%86%D8%AA?show=260#q260)نگ ه کنید
بستگی داره که شما برای چه کاربردی بخاید hu moment , central moment چیز خاصی ندارند.
moment هایی که پیچیده تره zernik هستش

crackestan
سه شنبه 27 دی 1390, 18:00 عصر
به این لینک (http://barnamenevis.org/showthread.php?313834-%D8%A8%D8%B0%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D9%85%D8%B1%DA%A9%D8%B2-%DB%8C%DA%A9-%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1&highlight=moment)نگاه کنید
بستگی داره که شما برای چه کاربردی بخاید hu moment , central moment چیز خاصی ندارند.
moment هایی که پیچیده تره zernik هستش
دوست عزیزم
لینکی که لطف کردید و دادید رو دیدم . متاسفانه من پیاده سازی مامنت رو بلد نیستم و الان فقط میخوام روی مامنت های سنترال کار کنم .
اگر لطف کنید چگونگی تهیه و پیاده سازی مامنت سنترال رو یه توضیح خیلی خیلی مختصر بهم بدید ، واقعا ممنون میشم .
دارم تلاش میکنم که فهم کاملی از مامنت بدست بیارم و خودم چنتا پیاده سازی کنم .
مامنت سنترال میخوام پیاده سازی کنم ، ولی اصلا بلد نیستم .

مصطفی ساتکی
سه شنبه 27 دی 1390, 21:33 عصر
از او لینکی که گذاشتم spatial moment رو محاسبه می کنه یعنی مقدار pnt
جهت بدست آوردن central moment مقدار pnt را با اون کد محاسبه کرده و در کد زیر استفاده کنید

float centalMoment(int p,int q)
{
float result = 0;
for(int y=0;y< image->height;y++)
for(int x=0;x <image->width;x++)
{
result += pow((x - pnt.x) ,p) + pow((y- pnt.y),q) * image->pixels(x,y);
}
return result;
}

crackestan
چهارشنبه 28 دی 1390, 11:12 صبح
واقعا ممنونم ازتون بابت توجهتون
دوست گرامی ، من یه مقدار از پایه مشکل دارم ، که واقعا خجالت میکشم سئوال بپرسم .
1 . میشه بگید به کمک سنترال مامنت ما چه چیزی رو بدست میاریم ؟؟؟
2 . هدفمون از سنترال مامنت چیه ؟؟؟
3 . من واقعا چیزه خاصی از مانت بلد نیستم ولی میخوام این مامنت رو بفهمم . ببینید این کاری که من میگم درسته یا نه :
ابتدا یه عکس رو به نرم افزار متلب وارد میکنم ، بعد این فرایندهایی که شما نوشتید رو روش پیاده سازی میکنم ؟؟؟ ( اگر درسته ، میشه بفرمایید نتیجه این فرایند سنترال مامنت ، چه چیزی رو به ما میده ؟؟؟ )
4 . آیا جمله ی زیر درسته ؟؟
" ما یک تصویر رو که با یک دوربین تهیه کردیم ، به نرم افزار متلب وارد میکنیم ، و به روی اون دستوراتی را اعمال میکنیم " .
5 . آیا مقاله یا کتاب فارسی موجود هست درباره ی مامنت ها و یا مرتبط به مامنت ها که بتونه در فهم اولیه آن ما رو یاری کنه ؟؟؟

واقعا معذرت میخوام که سئوالاتم اینجوریه . میدونم که خیلی سئوالاتم تابلو هست . باور کنید خیلی تلاش کردم برای فهم مامنت ولی خود مامنت رو هم درست متوجه نشدم .

مصطفی ساتکی
چهارشنبه 28 دی 1390, 20:32 عصر
دوست عزیز اگر واقعاً می بینید که اینقدر مشکل دارید باید یه خورده مطالعه خودتونو بیشتر کنید.کلاً moment یه مبحث آماریه .که بیشترین کاربردش در پردازش تصویر هستش.
شما تصویری دارید به فرض مثال یک تصویر باینری مایلید مرکز ثقل این شی رو پیدا کنید نه مرکز مستطیلی که در اون احاطه شده برای بدست آوردن این مرکز از central moment مرتبه اول در جهت x و y استفاده می کنند.
برای عملیات preprocessing همچون نرمال سازی تصویر با استفاده از مرکز ثقل این نرمال سازی صورت می گیره

crackestan
شنبه 12 فروردین 1391, 11:43 صبح
با تشکر از لطف تمامیه دوستان عزیز خصوصا جناب mostafa.sataki
من تونستم سنترال مامنت رو پیاده سازی کنم .
حالا یه سوال برام پیش اومده :
معنی خروجی ای که سنترال مامنت به ما میده چیه ؟؟
من سنترال مامنت رو روی یه تصویر وقتی اعمال میکنم ، یه آرایه به من میده که من هیچی ازش نمیفهمم . امکان داره درباره ی خروجی سنترال مامنت بهم توضیح بدید ؟؟؟

en-keramat
یک شنبه 13 فروردین 1391, 15:27 عصر
اگر با نرم افزار Matlab کار می کنید . من یه کد که hu moments پیادسازی کرده که بر اساس فرمول که در اینجا هستش نوشته است

http://en.wikipedia.org/wiki/Image_moment

اینم سورس Matlab



% This function calculates hu moments acording to the formulas given in
% http://en.wikipedia.org/wiki/Image_moment

% First of all the central moments(mu(i,j)) and center of mass(x_bar,y_bar)
% of the image are calculated according to the formulas given in the link
% then hu moments are calculated and saved in a vector as an output



function hu_moments_vector = hu_moments( image )

[height, width] = size(image);

% define a co-ordinate system for image
xgrid = repmat((-floor(height/2):1:ceil(height/2)-1)',1,width);
ygrid = repmat(-floor(width/2):1:ceil(width/2)-1,height,1);

[x_bar, y_bar] = centerOfMass(image,xgrid,ygrid);

% normalize coordinate system by subtracting mean
xnorm = x_bar - xgrid;
ynorm = y_bar - ygrid;

% central moments
mu_11 = central_moments( image ,xnorm,ynorm,1,1);
mu_20 = central_moments( image ,xnorm,ynorm,2,0);
mu_02 = central_moments( image ,xnorm,ynorm,0,2);
mu_21 = central_moments( image ,xnorm,ynorm,2,1);
mu_12 = central_moments( image ,xnorm,ynorm,1,2);
mu_03 = central_moments( image ,xnorm,ynorm,0,3);
mu_30 = central_moments( image ,xnorm,ynorm,3,0);


%calculate first 8 hu moments of order 3
I_one = mu_20 + mu_02;
I_two = (mu_20 - mu_02)^2 + 4*mu_11;
I_three = (mu_30 - 3*mu_12)^2 + (mu_03 - 3*mu_21)^2;
I_four = (mu_30 + mu_12)^2 + (mu_03 + mu_21)^2;
I_five = (mu_30 - 3*mu_12)*(mu_30 + mu_12)*((mu_30 + mu_12)^2 - 3*(mu_21 + mu_03)^2) + (3*mu_21 - mu_03)*(mu_21 + mu_03)*(3*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2);
I_six = (mu_20 - mu_02)*((mu_30 + mu_12)^2 - (mu_21 + mu_03)^2) + 4*(mu_30 + mu_12)*(mu_21 + mu_03);
I_seven = (3*mu_21 - mu_03)*(mu_30 + mu_12)*((mu_30 + mu_12)^2 - 3*(mu_21 + mu_03)^2) + (mu_30 - 3*mu_12)*(mu_21 + mu_03)*(3*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2);
I_eight = mu_11*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2 - (mu_20 - mu_02)*(mu_30 + mu_12)*(mu_21 + mu_03);

hu_moments_vector = [I_one, I_two, I_three,I_four,I_five,I_six,I_seven,I_eight];

end

% calculate scale invariant central moments
function cm = central_moments( image ,xnorm,ynorm,p,q)

cm = sum(sum((xnorm.^p).*(ynorm.^q).*image));
cm_00 = sum(sum(image)); %this is same as mu(0,0);
% normalise moments for scale invariance
cm = cm/(cm_00^(1+(p+q)/2));

end

% calculate center of mass
function [x_bar, y_bar] = centerOfMass(image,xgrid,ygrid)

eps = 10^(-6); % very small constant

x_bar = sum(sum((xgrid.*image)))/(sum(image(:))+eps);
y_bar = sum(sum((ygrid.*image)))/(sum(image(:))+eps);

end




امیدوارم که بدرد تون بخوره ، در زمینه مقاله و کتاب به زبان انگلیسی خواستید می تونم کمک اتون کنم ، من چیز فارسی در این مورد پیدا نکردم و فکر نمی کنم هم باشه :لبخندساده:

ali_reza_nazari
جمعه 22 دی 1391, 18:13 عصر
باسلام
دوستان اگه ممکنه در مورد MOMENT INVARIANTS هم کمی توضیح بدید
و اینکه الگوریتم برنامه نویسی اون به چه شکلی هست
استاد ما گفته او سی آر اعداد رو با این روش بنویسیم
ولی من هرچه در اینترنت جستجو کردم فقط تئوری ریاضی اونو دیدم و چیزی از الگوریتمش پیدا نکردم
ممنون

مصطفی ساتکی
شنبه 23 دی 1391, 22:26 عصر
برای نوشتن ocr نمی تونید از Hu momemnt استفاده کنید چون اطلاعات خاصی رو به شما نمی ده فقط 7 تا مقدار هستش که تو حالت آزمایشگاهی و کاملاً بدون نویز هم نمی تونه کلاسیفای کنه.
ولی اگر از مومنت های پیچیده تری مثل Legendre Moments، Zernike Momentsو pseudo Zernike Moments استفاده کنید براحتی می تونند تو مرتبه های بالا عمل reconstruction رو انجام بدن حتی scale و rotation invariant نیز هستند.

ali_reza_nazari
سه شنبه 26 دی 1391, 00:42 صبح
سلام
من با دلفی برنامه می نویسم
استاد ما گفته به روش ثابت گشتاور و توصیفگر فوریه و هاسدورف کلاس بندی کنید و ocr رو انجام بدید
پیشنهادش زرنیک هست
من فرمول توصیفگر فوریه رو دارم. ولی نمی دونم چطوری باید محاسبه کنم و به عدد اعشاری تبدیلش کنم. چون نمی دونم با علامت رادیکال منهای 1 چه رفتاری باید داشته باشم. فقط می دونم باید ضرایب مهم رو استخراج کنم. حالا چطوری توی برنامه نویسی پیاده سازی میشه، استاد هیچ چیزی نگفته

اگه ممکنه در مورد پیاده سازی زرنیک و توصیفگر فوریه هم راهنمایی بفرمایید
ممنونم

akbariz
دوشنبه 02 بهمن 1391, 16:22 عصر
با سلام خدمت همه دوستانم عزیز من هم روی ممان های زرنیک برای استخراج ویژگی کار می کنم متاسفانه گرایش من هوش نیست و اطلاعات زیادی در این خصوص ندارم لطفا اگه اطلاعاتی در این زمینه دارید (مقدماتی تا پیشرفته) راهنمایی بفرمایید:لبخندساده:

farshidshd
شنبه 04 آبان 1392, 11:35 صبح
اگر با نرم افزار Matlab کار می کنید . من یه کد که hu moments پیادسازی کرده که بر اساس فرمول که در اینجا هستش نوشته است

http://en.wikipedia.org/wiki/Image_moment

اینم سورس Matlab



% This function calculates hu moments acording to the formulas given in
% http://en.wikipedia.org/wiki/Image_moment

% First of all the central moments(mu(i,j)) and center of mass(x_bar,y_bar)
% of the image are calculated according to the formulas given in the link
% then hu moments are calculated and saved in a vector as an output



function hu_moments_vector = hu_moments( image )

[height, width] = size(image);

% define a co-ordinate system for image
xgrid = repmat((-floor(height/2):1:ceil(height/2)-1)',1,width);
ygrid = repmat(-floor(width/2):1:ceil(width/2)-1,height,1);

[x_bar, y_bar] = centerOfMass(image,xgrid,ygrid);

% normalize coordinate system by subtracting mean
xnorm = x_bar - xgrid;
ynorm = y_bar - ygrid;

% central moments
mu_11 = central_moments( image ,xnorm,ynorm,1,1);
mu_20 = central_moments( image ,xnorm,ynorm,2,0);
mu_02 = central_moments( image ,xnorm,ynorm,0,2);
mu_21 = central_moments( image ,xnorm,ynorm,2,1);
mu_12 = central_moments( image ,xnorm,ynorm,1,2);
mu_03 = central_moments( image ,xnorm,ynorm,0,3);
mu_30 = central_moments( image ,xnorm,ynorm,3,0);


%calculate first 8 hu moments of order 3
I_one = mu_20 + mu_02;
I_two = (mu_20 - mu_02)^2 + 4*mu_11;
I_three = (mu_30 - 3*mu_12)^2 + (mu_03 - 3*mu_21)^2;
I_four = (mu_30 + mu_12)^2 + (mu_03 + mu_21)^2;
I_five = (mu_30 - 3*mu_12)*(mu_30 + mu_12)*((mu_30 + mu_12)^2 - 3*(mu_21 + mu_03)^2) + (3*mu_21 - mu_03)*(mu_21 + mu_03)*(3*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2);
I_six = (mu_20 - mu_02)*((mu_30 + mu_12)^2 - (mu_21 + mu_03)^2) + 4*(mu_30 + mu_12)*(mu_21 + mu_03);
I_seven = (3*mu_21 - mu_03)*(mu_30 + mu_12)*((mu_30 + mu_12)^2 - 3*(mu_21 + mu_03)^2) + (mu_30 - 3*mu_12)*(mu_21 + mu_03)*(3*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2);
I_eight = mu_11*(mu_30 + mu_12)^2 - (mu_03 + mu_21)^2 - (mu_20 - mu_02)*(mu_30 + mu_12)*(mu_21 + mu_03);

hu_moments_vector = [I_one, I_two, I_three,I_four,I_five,I_six,I_seven,I_eight];

end

% calculate scale invariant central moments
function cm = central_moments( image ,xnorm,ynorm,p,q)

cm = sum(sum((xnorm.^p).*(ynorm.^q).*image));
cm_00 = sum(sum(image)); %this is same as mu(0,0);
% normalise moments for scale invariance
cm = cm/(cm_00^(1+(p+q)/2));

end

% calculate center of mass
function [x_bar, y_bar] = centerOfMass(image,xgrid,ygrid)

eps = 10^(-6); % very small constant

x_bar = sum(sum((xgrid.*image)))/(sum(image(:))+eps);
y_bar = sum(sum((ygrid.*image)))/(sum(image(:))+eps);

end




امیدوارم که بدرد تون بخوره ، در زمینه مقاله و کتاب به زبان انگلیسی خواستید می تونم کمک اتون کنم ، من چیز فارسی در این مورد پیدا نکردم و فکر نمی کنم هم باشه :لبخندساده:







این چطوری باید اجرا بشه؟

manafzade
شنبه 04 آبان 1392, 22:56 عصر
از او لینکی که گذاشتم spatial moment رو محاسبه می کنه یعنی مقدار pnt
جهت بدست آوردن central moment مقدار pnt را با اون کد محاسبه کرده و در کد زیر استفاده کنید

float centalMoment(int p,int q)
{
float result = 0;
for(int y=0;y< image->height;y++)
for(int x=0;x <image->width;x++)
{
result += pow((x - pnt.x) ,p) + pow((y- pnt.y),q) * image->pixels(x,y);
}
return result;
}

آقای ساتکی یه اشتباهیو کردن.
result += pow((x - pnt.x) ,p) + pow((y- pnt.y),q) * image->pixels(x,y);
جمع نیست بلکه ضربه
result += pow((x - pnt.x) ,p) * pow((y- pnt.y),q) * image->pixels(x,y);

manafzade
شنبه 04 آبان 1392, 23:20 عصر
بزارین من یه توضیحی بدم.
ابتدا از حالت ساده شروع میکنیم.
ما دو پارامتر p,q داریم که مرتبه های گشتاور یا همون ممنتوم رو مشخص میکنن. این پارامترها که یکی بر روی x (ستون) و دیگری بر روی y (سطر) عمل میکنند.
فرض کنید p=0 , q=1 باشد و تصویر ما باینری است یعنی تنها تشکیل شده از صفر و یک است. حال ما میخواهیم گشتاور مرتبه یک را برای آن به دست آوریم (p=0,q=1)
خوب بنا به فرمول داریم:




res=res+(y)*f(x,y)


به دلیل اینکه f یا صفر است (اگر پس زمینه باشد) و یا یک (که نشان دهنده شی است)، محاسبه این گشتاورمرتبه یک به معنای محاسبه مجموع مختصات y نقاط مربوط به شی است که اگر بر تعداد آنها (گشتاور مرتبه صفر) تقسیم کنیم همان میانگین نقاط شی در جهت y خواهد بود.
همین طور برای گشتاور مرتبه یک حالت (p=1,q=0) در جهت x خواهد بود.





res=res+(x)*f(x,y)



منظور از گشتاور مرتبه صفر همان تعداد نقاط شی است : (p=0,q=0)





res=res+f(x,y)



پس می بینیم گشتاور، بر اساس مرتبه آن دارای مفاهیم متفاوت آماری است که تعیین کننده تعداد، میانگین(مرکز ثقل)، واریانس و کجی و گشتاورهای مرتبه بالاتر است که گشتاورها با مرتبه های بالا دارای مفهوم خاصی نیستند. معمولا تا مرتبه سه و چهار مورد استفاده قرار میگیرند. (برای توصیف شی بر اساس مفهوم آماری گشتاورها)

manafzade
شنبه 04 آبان 1392, 23:27 عصر
گشتاور با حالت p=1 , q=1 خواهد شد:

res=res+x*y*f(x,y)
برای اینکه گشتاورها مستقل از جابجایی باشند، یعنی با جابجاشدن تصویر مقدار نهایی آن تفاوتی نکند، بجای استفاده از x از x-x0 و بجای y از y-y0 استفاده میکنند.
که x0 , y0 همان مختصات مرکز ثقل شی می باشند. همان طوری که آقای ساتکی فرمول اولیه رو بر این اساس نوشتند.
برای مستقل کردن گشتاورها نسبت به چرخش نیز تغییراتی بر روی این فرمولها حاصل میشود تا با تغییر زاویه تصویر عدد نهایی گشتاورها تغییری نکند.

عباس65
جمعه 26 اردیبهشت 1393, 17:03 عصر
سلام.
من دانشجوی نرم افزارم.واسه پروژه ام (در مورد پردازش تصویر) به مومنت زرنیک برای استخراج ویژگی نیاز دارم.
متاسفانه هیچ اطلاعاتی در این مورد ندارم و در اینترنت مطلب مفیدی پیدا نکردم.
خواهش میکنم کمکم کنید.:اشتباه:

ZiRa000
جمعه 12 تیر 1394, 22:36 عصر
سلام من در پردازش تصویر و بینایی تقریبا صفرم. اما من تعدادی ماتریس دارم که مقادیری دارند که این مقادیر تا ده‌‌‌ هزار هم میرسه.حالا من می‌خواهم یک سری بررسیها روی این مقادیر انجام بدهم. حالا روی هر ماتریس یا روی تعدادی از این ماتریسها؟ حالا این بررسیها میتواند برسی‌ واریانس باشه یا بررسیهای دیگه. �?‌من در جائی‌ دیدم که مومنت تصویر استفاده کرده. کلا تکنیک‌های ویژن برای این نوع �?‌بررسیها چیه و مومنت تصویر چیه؟ببخشید من دانشی �?‌در این زمینه ندارم

gelecek
پنج شنبه 08 مرداد 1394, 12:06 عصر
با سلام
آیا گشتاور زرنیک همان مومنت زرنیک است؟
من باید گشتاور زرنیک را یاد بگیرم.از کجا و چه مبحثی باید شروع به خواندن کنم؟
ممنون