رفتن به مطلب

رسم دایره بر روی تصویر


zahra jalili

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

سلام دوستان

 

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

بعد از بدست آوردن تومور با ترشولدینگ ، با دستور bwlabel تومورا رو labelگذاری کردم. حالا بعدش لازمه که یه دایره هم مساحت با تومور بسازیم. که با استفاده از مساحت تومور اندازه شعاع دایره رو می تونیم حساب کنیم. بعد از این مرحله دایره رو باید انقد رو تومور حرکت بدیم که بیشترین اشتراک بدست بیاد. حالا من میخوام دایره رو رسم کنم و اینکه مرکز ثقل تومور رو هم دارم میخوام که مرکز دایره بیفته رو مرکز ثقل تومور. ممنون میشم کمک کنید اینا رو چطور انجام بدم.

لینک به دیدگاه
سلام دوستان

 

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

بعد از بدست آوردن تومور با ترشولدینگ ، با دستور bwlabel تومورا رو labelگذاری کردم. حالا بعدش لازمه که یه دایره هم مساحت با تومور بسازیم. که با استفاده از مساحت تومور اندازه شعاع دایره رو می تونیم حساب کنیم. بعد از این مرحله دایره رو باید انقد رو تومور حرکت بدیم که بیشترین اشتراک بدست بیاد. حالا من میخوام دایره رو رسم کنم و اینکه مرکز ثقل تومور رو هم دارم میخوام که مرکز دایره بیفته رو مرکز ثقل تومور. ممنون میشم کمک کنید اینا رو چطور انجام بدم.

 

 

سلام

این کد یه دایره وسط تصویر رسم می کنه:

 

mqr6af5cch2qvnoxkps.png

 

clear;
img = imread('peppers.png');
R = 40;
imshow(img)
x0 = size(img,2)/2;
y0 = size(img,1)/2;
hold on
Theta = 0:0.01:2*pi;
x = x0 + cos(Theta)' * R;
y = y0 + sin(Theta)' * R;
plot(x0,y0,'r*')
plot(x,y,'r','LineWidth',3)

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

سلام

من با دستور زیر یه دایره ساختم که داخلش هم مقدارش یک باشه، تعداد نقاطی که داخلی دایره هستن یا به عبارتی تعداد نقاطی که مقدارشون برابر 1 هست رو دارم. حالا میخوام یک ماتریس n*2 بسازم که مختصات این نقاطی که 1 هستن رو برام ذخیره کنه، چطور میتونم این کار رو انجام بدم.

tBW5 = zeros(size(BW5));
[Y, X]=meshgrid(1:size(BW5,1), 1:size(BW5,1));
tBW5((Y-cy).^2 + (X-cx).^2 < R^2) = 1;
imshow(tBW5, []);

ممنون

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

من با دستور زیر یه دایره ساختم که داخلش هم مقدارش یک باشه، تعداد نقاطی که داخلی دایره هستن یا به عبارتی تعداد نقاطی که مقدارشون برابر 1 هست رو دارم. حالا میخوام یک ماتریس n*2 بسازم که مختصات این نقاطی که 1 هستن رو برام ذخیره کنه، چطور میتونم این کار رو انجام بدم.

tBW5 = zeros(size(BW5));
[Y, X]=meshgrid(1:size(BW5,1), 1:size(BW5,1));
tBW5((Y-cy).^2 + (X-cx).^2 < R^2) = 1;
imshow(tBW5, []);

ممنون

 

سلام

از آدرس دهی منطقی می تونین استفاده کنین، مثلا:

 

tBW5 == 1

 

یه ماترسی از نوع logical هست که برای آدرس دهی می تونین ازش استفاده کنین. یا با دستور find موقعیت یک های ماتریس پیدا کنین:

 

tBW5 = randi([0 1],5,5)
idx = find(tBW5)
% Or
[row col] = find(tBW5)

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

از آدرس دهی منطقی می تونین استفاده کنین، مثلا:

 

tBW5 == 1

 

یه ماترسی از نوع logical هست که برای آدرس دهی می تونین ازش استفاده کنین. یا با دستور find موقعیت یک های ماتریس پیدا کنین:

 

tBW5 = randi([0 1],5,5)
idx = find(tBW5)
% Or
[row col] = find(tBW5)

 

این چیزی که شما نوشتین صحیح، اما من میخوام که تو یه ماتریس 2*n یا 2*n اندیس سطر و ستون کنار هم باشن. نه این که شماره سطرایی که 1 هستن تو یه بردار و ستونایی که 1 هستن تو یه بردار دیگه باشن.

من این کدو نوشتم به نظر شما قابل قبوله؟

tBW6=[1:1:38;1:1:38];
ii=1; jj=1;
for i=1:512
   for j=1:512
       ii=1;
       if(BW5(i,j)==1)
          tBW6(ii,jj)=(i);
          ii=2;
          tBW6(ii,jj)=(j);
          jj=jj+1;
       end     
   end
end

لینک به دیدگاه
این چیزی که شما نوشتین صحیح، اما من میخوام که تو یه ماتریس 2*n یا 2*n اندیس سطر و ستون کنار هم باشن. نه این که شماره سطرایی که 1 هستن تو یه بردار و ستونایی که 1 هستن تو یه بردار دیگه باشن.

من این کدو نوشتم به نظر شما قابل قبوله؟

tBW6=[1:1:38;1:1:38];
ii=1; jj=1;
for i=1:512
   for j=1:512
       ii=1;
       if(BW5(i,j)==1)
          tBW6(ii,jj)=(i);
          ii=2;
          tBW6(ii,jj)=(j);
          jj=jj+1;
       end     
   end
end

 

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

 

A = reshape(1:25,[5 5])

A =

    1     6    11    16    21
    2     7    12    17    22
    3     8    13    18    23
    4     9    14    19    24
    5    10    15    20    25

 

که آدرس خطی درایه های یک رو توی متغیر idx کد قبلی دارین، یا اگه سطر و ستون ها رو توی یه ماتریس می خواین داشته باشین، از حالت دوم دستور find که من نوشتم استفاده کنین:

 

tBW5 = randi([0 1],5,5)
[row col] = find(tBW5);
tBW6 = [row col]

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

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

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

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

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

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

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

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

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

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