رفتن به مطلب

تشخیص کپسول های اشتباهی یا خالی ورق دارو


ارسال های توصیه شده

p02.rar

 

 

سلام

یه برنامه دارم که عکس یه ورق کپسول(دارو) رو بهش میدی اون بهت میگه چندتا کپسولِ اشتباهی و یا خالی داره.

 

 

یه فایل ورد داخل این لینک هست که کل برنامه توشه اکثر خطاش رو زیر برنامه توضیح دادم که این خط چیکار میکنه ولی برای بقیش نیاز به کمک دارم

 

 

برنامه ی جالبی اگه کمک هم نمیکنید لا اقل دانلودش کنید

:ws52:

لینک به دیدگاه

 

 

سلام

یه برنامه دارم که عکس یه ورق کپسول(دارو) رو بهش میدی اون بهت میگه چندتا کپسولِ اشتباهی و یا خالی داره.

 

 

یه فایل ورد داخل این لینک هست که کل برنامه توشه اکثر خطاش رو زیر برنامه توضیح دادم که این خط چیکار میکنه ولی برای بقیش نیاز به کمک دارم

 

 

برنامه ی جالبی اگه کمک هم نمیکنید لا اقل دانلودش کنید

:ws52:

 

سلام دوست عزیز

 

یه نگاهی انداختم، تا حالا مکان کپسول های اشتباهی رو پیدا کردی و روی تصویر نشونشون میدی.

 

در ادامه می خوای چیکار کنی؟

لینک به دیدگاه

دوستم مرسی که برنامه رو دیدی

برنامه کامله

اگه دیده باشید تا یه جایی، برنامه خط به خط ترجمه شده (مستند سازی شده)

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

ولی بقیه ی خط های برنامه رو به طور واضح نمی دونم چی کار می کنه می خواستم اگه بشه کمکم کنین

بازم مرسی:icon_gol:

لینک به دیدگاه

سلام

از خط 50 به بعد رو توضیحاتش رو می نویسم:a030:

 

تا اینجا جهت تصویر درست میشه، یعنی از تصویر اول به تصویر دوم رسیدیم:

8zv7youra7burgdmaf9v.png

 

z2 = regionprops ( A , 'BoundingBox');
z2= z2.BoundingBox ;
A2 = imcrop ( pic2 , [z2(1)+5   z2(2)+5   z2(3)-10  z2(4)-5] ) ; 
subplot(2,3,5),imshow(A2);

 

A همون تصویر باینری مون هست که جهتش درست شده، توی این خطها اومده محدوده ورق کپسول رو پیدا می کنه، بعد با imcrop میاد اون رو از تصویر بدست آمده از مرحله قبل، جدا می کنه:

a5zotkti6wacfru0hdo7.png

r = roicolor ( A2 ( : , : , 1 ) , 30,65 ) ;
g = roicolor ( A2 ( : , : , 2 ) ,70,140 ) ;
b = roicolor ( A2 ( : , : , 3 ) ,60,110 ) ;
c=r.*g ;
c=c.*b;
c = imclose(c,se);
c = bwareaopen(c,50);
subplot(2,3,6),imshow ( c) ;

 

توی این خط ها اومده محدوده رنگی کپسول مورد نظر رو برای هر کانال تصویر (قرمز و سبز و آبی) اعمال می کنه، در واقع رنگ کپسول مورد نظر رو از تصویر پیدا می کنه. مثلا خط اول میشه پیکسل هایی که مقدار مولفه قرمزشون بین 30 تا 65 باشه، دو خط بعد هم برای مولفه سبز و آبی تصویر مون هست، در نهایت این سه تا ماتریس باینری رو در هم ضرب می کنه، تا پیکسل هایی که هر سه مشخصه رو دارن، مشخص بشن. بعد با imclose پیکسل های که فاصله کمی از هم دارن ولی پیوسته نیستن، به هم متصل میشن، بعد bwareaopen کامپوننت های کوچیک رو پاک می کنه، به این تصویر می رسیم، که بخش های سبز رنگ جدا شدن، در واقع مشخصه کپسول های سالممون:

 

 

op344i03oi1f3zd6u6d4.png

 

 

[x,y,z]= size(c);
xn=ceil(x/2);
yn=ceil(y/6);
figure,imshow ( A2 ) ; 
err=0;
err=double(err);
y1=0;x1=0;

 

روی یه ورق 12 تا کپسول داریم، که در دو سطر و 6 تا ستون قرار گرفتن، فاصله عمودی و افقی این کپسول ها رو بدست میاره، فواصل هم برابر فرض شده، تعدا ستون های تصویر رو قبلی رو تقسیم بر 6 کرده، شده فاصله افقی کپسول های یه ردیف.

 

for v1=1:2
   y1=0;
   for v2=1:6
       A3 = imcrop ( c , [y1 , x1 , yn-2 , xn-2 ] ) ; 
%    figure, imshow(A3);
%     pause(1);
   test=max(A3);
   if  (test == 0 )
       imellipse ( gca , [y1 , x1 , yn-2 , xn-2 ]) ;
       err=err+1;
   end
   y1=y1+yn;
   end
   x1=x1+xn;
end
title ( ['Capsule Error  = ', num2str( err )]  );

 

توی این دو تا حلقه هم می خواد، هر کدوم از این 12 جایی که کپسول ها درش قرار می گیرن به صورت جدا بررسی کنه:

 

hywnw7wdoo7s8fqr7poc.png

 

هر کدوم از این مناطق رو crop می کنه، البته اون تصویر باینری قبلی رو، نگاه می کنه اون مشخصه کپسول سالم (ناحیه سفید) داخلش هست یا نه، اگه نباشه یه بیضی توی اون رسم می کنه، میره سراغ جای قرص بعدی تا اینکه تموم بشن.

 

huso3hg0dg62vgmq7xk.png

 

کد جالبی بود.:ws3:

لینک به دیدگاه

نمی دونم پطوری تشکر کنم

یک دنیا ممنون

فقط اینجا دو تا سوال برای من پیش اومد

1- توی خط 31 چرا از bwlabel استفاده شده؟

2- توی خط 52 و 53 دستور boundingbox استفاده شده، کار این دستور چیه؟

بازم ممنووووووون:icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol:

لینک به دیدگاه
نمی دونم پطوری تشکر کنم

یک دنیا ممنون

فقط اینجا دو تا سوال برای من پیش اومد

1- توی خط 31 چرا از bwlabel استفاده شده؟

2- توی خط 52 و 53 دستور boundingbox استفاده شده، کار این دستور چیه؟

بازم ممنووووووون:icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol::icon_gol:

 

خواهش می کنم.

bwlabel اینجا کار خاصی نمی کنه، مگر اینکه چند تا آبجکت توی تصویر داشته باشین، مثلا دو تا ورق کپسول با یه فاصله ای باشه، تو اون حالت جهت برای هر کدوم رو میشه با لیبل کردن بدست آورد، اگه لیبل استفاده نشه جهت کلی تصویر بدست میاد و فرض میشه که یه آبجکت توی تصویر داریم.

 

اما سوال دوم رو که تقریبا توضیح دادم بالا، میاد کوچیک ترین مستطیلی که شامل آبجکتمون (ورقه کپسول) میشه رو پیدا می کنه، محل قرارگیری کپسول رو باهاش بدست میاره. این محدوده رو با تصویر باینری بدست میاریم، ولی برای جدا کردن ورق قرص باید از تصویر اصلی که جهتش اصلاح شده استفاده کنیم.:a030:

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

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

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...