بدست آوردن گرادیان تصویر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

بدست آوردن گرادیان تصویر

+1 امتیاز
سلام .

من قبلاً توی MATLAB از گرادیان استفاده کردم قصد دارم گردایان تصویر را محاسبه و نمایش بدم توی OpenCV چطور باید اینکار را انجام بدم
سوال شده اسفند 7, 1392  بوسیله ی saleh110 (امتیاز 70)   2 11 16

1 پاسخ

+4 امتیاز
 
بهترین پاسخ

اگر توی MATLAB از گردایان استفاده کردید اطلاع دارید که برای بدست آوردن گردادیان ابتدا بایستی در جهت y و جهت x از تصویر مشتق بگیرید و سپس جهت بدست آوردن جهت باید از مقادیر مشتق arc tan بگیرید برای بدست آوردن مشتق می تونید از sobel در دو جهت استفاده کنید و برای محاسبه سریع گرادیان در OpenCV تابع cart2Polar استفاده میشه.در ضمن در نواحی پشت زمینه اغلب نویز کمی وجود دارد که برای صرف نظر کردن از گرادیان در آن نقاط می توانید از magnitude استفاده کنید یعنی ماسکی از تصویر magnitude ایجاد کنید این ماسک تشکیل شده از نواحی که magnitude آنها بزرگتر از مقدار magnitude شدید ترین نویز باشد

برای مثال سعی کردم گرادیان را بر روی مرز یک بیضی به شما نشان بدم که تغییرات تدریجی مشتق جهتی را در هر نقطه از مرز بیضی ببینید.

به مثال زیر توجه کنید:

تصویر اصلی :

 

 

Mat img = imread("d:/2.bmp",0);
	Mat sbl_x,sbl_y;
	Sobel(img,sbl_x,CV_32FC1,1,0);
	Sobel(img,sbl_y,CV_32FC1,0,1);
	
	Mat mag,angle;
	
	cartToPolar(sbl_x,sbl_y,mag,angle,true);
	mag = mag < 200;
	Mat temp_mask = mag.clone();
	
	Mat mag_mask;
	normalize(mag,mag_mask,0,255,CV_MINMAX,CV_8UC1);

	Mat view;
	angle.setTo(0,mag_mask);
	normalize(angle,view,0,255,CV_MINMAX,CV_8UC1);
	Mat view2;
   applyColorMap(view,view2,cv::COLORMAP_HSV);
   view2.setTo(0,temp_mask);
   imshow("view",view2);
   
   waitKey(0);

 

پاسخ داده شده اسفند 10, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده اسفند 28, 1392 بوسیله ی مصطفی ساتکی
...