CBIR: Content Based Image Retrieval

بازیابی تصویر محتوا محور

CBIR: Content Based Image Retrieval

بازیابی تصویر محتوا محور

الگوی باینری محلی (Local binary patterns)


الگوی باینری محلی اولین بار به عنوان یک توصیف کننده ی الگوی غیرحساس به چرخش برای تصاویر طیف خاکستری معرفی شد. این الگوریتم با آستانه گیری همسایگی 3×3 برای هر پیکسل مرکزی با شدت سطح خاکستری Pc، تعداد 8 پیکسل همسایگی آن  Pn که مقدار n از صفر تا هفت می باشد را محاسبه نموده و نتیجه را به عنوان یک عدد باینری بر میگرداند.

یک مثال با استفاده از این تکنیک در متلب را می توان به صورت زیر تعریف نمود:

مرحله اول: ابتدا دو تصویراولیه در متلب خوانده میشود

brickWall = imread('bricks.jpg');

rotatedBrickWall = imread('bricksRotated.jpg');

 

تصویر اول ، تصویر اصلی و تصویر دوم تصویر دوران یافته تصویر اول میباشد.اکنون تصویر سومی که متفاوت از این دو تصویر است را در متلب میخوانیم:

carpet = imread('carpet.jpg’);

 

مرحله دوم: اکنون به کمک تکنیک LBP ویژگی های باقت تصویر را استخراج میکنیم:

lbpBricks1 = extractLBPFeatures(brickWall,'Upright',false);

lbpBricks2 = extractLBPFeatures(rotatedBrickWall,'Upright',false);

lbpCarpet = extractLBPFeatures(carpet,'Upright',false);

 

مرحله سوم: میزان شباهت تصویر اولیه با تصویر دوم و سوم را با استفاده از مربع خطا اندازه گیری میکنیم

brickVsBrick = (lbpBricks1 - lbpBricks2).^2;

brickVsCarpet = (lbpBricks1 - lbpCarpet).^2;

 

اگر این مربع خطا را ترسیم کنیم مقدار آن برای تصویر اول نسبت به تصویر دوم کمتراز تصویر سوم است.

figure

bar([brickVsBrick; brickVsCarpet]','grouped’);

title('Squared Error of LBP Histograms’);

xlabel('LBP Histogram Bins’);

legend('Bricks vs Rotated Bricks','Bricks vs Carpet’);



بردار ویژگی LBP در ساده ترین شکل آن به روش زیر ایجاد می شود:

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

جایی که ارزش پیکسل مرکز بزرگتر از مقدار همسایه است عدد صفر و در غیر اینصورت عدد 1 را بنویسید. نتیجه آن یک عدد دودویی 8 رقمی است که معمولا برای راحتی تبدیل به decimal می شود.

 

هیستوگرام را برای تمامی سلول ها محاسبه و در صورت لزوم می توان آنها را نرمال کرد. هیستوگرام های نرمالیزه شده از تمام سلول ها یک بردار ویژگی برای کل تصویر ارائه می دهد


از این بردار ویژگی می توان با استفاده از ماشین بردار پشتیبان و یا دیگر الگوریتم های یادگیری ماشین برای پردازش تصاویر استفاده نمود. و در نهایت از این طبقه بندی می توان برای تشخیص چهره یا تجزیه بافت استفاده کرد.

 

نمونه کد تولیدی برای الگوریتم روش دایره ای به صورت ذیل می باشد:




function LBP_Im = LBP(Input_Im, R)

 if size(Input_Im, 3) == 3

     Input_Im = rgb2gray(Input_Im);

end;

L = 2*R + 1; %% The size of the LBP label

C = round(L/2);

Input_Im = uint8(Input_Im);

row_max = size(Input_Im,1)-L+1;

col_max = size(Input_Im,2)-L+1;

LBP_Im = zeros(row_max, col_max);

for i = 1:row_max

    for j = 1:col_max

         A = Input_Im(i:i+L-1, j:j+L-1);

        A = A+1-A(C,C);

        A(A>0) = 1;

       LBP_Im(i,j) = A(C,L) + A(L,L)*2 + A(L,C)*4 + A(L,1)*8 + A(C,1)*16 + A(1,1)*32 + A(1,C)*64 + A(1,L)*128;

    end;

end;