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

مشکل تولباکس مربوط به الگوریتم sift در متلب

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

 vlfeat-0.9.18-bin رو دانلود کردم وبه تولباکس  متلب اضافه هم کردم ، فقط وقتی می خوام استفاده کنم خطا میده.(خطاش هم اینه که میگه vl_sift به عنوان یک اسکریپت یا تابع شناخته نشده ) اگه امکان داره در مورد  هر چیزی که بتونه در این زمینه کمکم کنه ،راهنماییم  کنید.

ممنون
سوال شده فروردین 27, 1393  بوسیله ی porsan (امتیاز 77)   9 12 17
ویرایش شده فروردین 27, 1393 بوسیله ی BlueBlade

1 پاسخ

+2 امتیاز

سلام.

یک تمرین کامل در مورد نحوه استفاده از استخراج ویژگی SURF را برای شما قرار میدم که فقط بجای surf نام توابع را به sift تبدیل کنید.

دانلود

surf code

 

clear all;
close all;
clc
خواندن تصویر اولیه
imgRef  = imread('D:\MATCH\Ref.bmp');
خواندن تصویر مقصد
imgTemp = imread('D:\MATCH\Temp.bmp');
 
نمایش هر دو تصویر
figure(1),imshow(imgRef);
figure(2),imshow(imgTemp);

 

sift

 

خاکستری کردن تصاویر در 8 سطح
Isrc =rgb2gray(imgRef);
Ides =rgb2gray(imgTemp);
نمایش تصاویر خاکستری
figure,imshow(Isrc);
figure,imshow(Ides);

 

feature extraction

key point

لبه یابی تصاویر با فیلتر sobel
Isrcbw=edge(Isrc,'sobel'); 
نمایش تصویر لبه یابی شده مبدا

 

 

 

edge

figure,imshow(Isrcbw);
لبه یابی تصویر مقصد با فیلتر Prewitt
Idesbw=edge(Ides,'prewitt');
نمایش تصویر لبه یابی شده مقصد
figure,imshow(Idesbw);

corner detection

 

استخراج طول و عرض تصویر اولیه
[Isrch,Isrcw] = size(Isrc);

تبدیل هر بعد به اعداد صحیح و تقسیم بر چهار به منظور تشکیل گرید 4*4
Isrch = uint8(Isrch / 4) ;
Isrcw = uint8(Isrcw / 4) ;
 گرید بندی تصویر اولیه سیاه و سفید با رنگ سفید
تقسیم چهارتایی در ردیف ها و تقسیم چهارتایی در ستون ها
Isrcbw(Isrch:Isrch:end,:,:) = 1
Isrcbw(:,Isrcw:Isrcw:end,:) =1;      
نمایش تصویر گرید شده اولیه
figure, imshow(Isrcbw(

 

harris

همین روند برای تصویر مقصد و نمایش آن
[Idesh,Idesw] = size(Ides) ;
Idesh = uint8(Idesh / 4) ;
Idesw = uint8(Idesw / 4) ;
 
Idesbw(Idesh:Idesh:end,:,:) = 1;      
Idesbw(:,Idesw:Idesw:end,:) =1;       
figure, imshow(Idesbw);

 

 

 

FLANN

 

تشخیص نقاط خاص تصویر سیاه و سفید اولیه
pointsSrc = detectSURFFeatures(Isrc) ;  
تشخیص نقاط خاص تصویر سیاه و سفید ثانویه
pointsDes = detectSURFFeatures(Ides) ;
 استخراج فیچرهای تصویر اولیه از روی نقاط خاص
[featuresSrc,pointsSrc] = extractFeatures(Isrc, pointsSrc) ; 
استخراج فیچرهای تصویر مقصد از روی نقاط خاص
[featuresDes,pointsDes] = extractFeatures(Ides, pointsDes) ; 
مقایسه فیچرهای دو تصویر 
boxPairs  = matchFeatures(featuresSrc, featuresDes);  
 نمایش نقاط مقایسه شده
matchedSrc = pointsSrc(boxPairs(:, 1), :);
matchedDes = pointsDes(boxPairs(:, 2), :);
figure;
showMatchedFeatures(Isrc, Ides, matchedSrc, ...
matchedDes, 'montage');


show features

% t = 1 ;
% for ii = 1:4
%     for jj = 1:4
%         r = (ii-1) * m4 + 1 ;
%         c = (jj - 1) * n4 + 1 ;
%         POINTS = detectSURFFeatures(j(r:r+m4, c:c+n4)) ;
%         [features,validPoints] = extractFeatures(I,points);
%         figure(3)
%         POINTS.plot() ;
%         t = t + 1 ;
%     end
% end  
%POINTS = detectSURFFeatures(j(3:295,960:1440)) ;
%extractFeatures(I,points)
%POINTS = detectSURFFeatures(I,Name,Value) ;
 

 

 

پاسخ داده شده فروردین 27, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 27, 1396 بوسیله ی مصطفی ساتکی
در داکیومنتی که به اشتراک گذاشتید درخصوص استخراج ویژگی، لبه های رو استخراج کردید اما در استخراج ویژگی استفاده نکردید اما از آن ها استفاده نکردید. میشه لطفا توضیح بدید؟
واقعیتش این کد را یکی از دوستان به من داده بود و من هم اینجا قرار داده بودم تا کسی خواست استفاده کنه .الان دقیق نگاه کردم اصلاً نباید لبه یابی می کرد. در این دو روش استخراج ویژگی تصویر را لبه یابی کنید دیگه نمیشه از تصویر ویژگی استخراج کرد و به همین خاطر ایشون هم استفاده نکرده نمی دونم علت این همه لبه یابی چیه!!1
...