چرخش تصویر در متلب بدون تابع imrotate

javad_2

عضو جدید
سالم بر دوستان عزیز
خروجی برنامه ی من باید چرخش تصویر بر اساس زاویه ی دلخواه بدون استفاده از تابع imrotate یا هر تابع دیگه ای در برنامه باشد
من برنامه رو بر طبق زاویه ی 180 درجه نوشتم که کد ها رو می بینید
اما برنامه من باید بر طبق فرمول ماتریس دوران نوشته بشه
من فرمول ها رو هم براتون به نمایش گذاشتم فقط یه پیاده سازی این یه خط
دستور رو بر طبق این فرمول های داخل تصویر رو نیاز دارم
به دلیل اینکه من ریاضیات من ضعیفه خودم نتونستم فرمول ها رو پیاده کنم
ممنون می شم هر کسی که بتونه هر چه زودتر این یه خط کد رو بنویسه
با تشکر
beta=imread('koala.jpg');
beta=rgb2gray(beta);
[x,y]=size(beta);
alfa=zeros(x,y);
[x,y]=size(beta);
for i=1:768
for j=1:1024
alfa(i,j)=beta(x-i+1,y-j+1);
end
end
imshow(beta);
figure;
imshow(alfa,[]);
 
آخرین ویرایش توسط مدیر:

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
سالم بر دوستان عزیز
خروجی برنامه ی من باید چرخش تصویر بر اساس زاویه ی دلخواه بدون استفاده از تابع imrotate یا هر تابع دیگه ای در برنامه باشد
من برنامه رو بر طبق زاویه ی 180 درجه نوشتم که کد ها رو می بینید
اما برنامه من باید بر طبق فرمول ماتریس دوران نوشته بشه
من فرمول ها رو هم براتون به نمایش گذاشتم فقط یه پیاده سازی این یه خط
دستور رو بر طبق این فرمول های داخل تصویر رو نیاز دارم
به دلیل اینکه من ریاضیات من ضعیفه خودم نتونستم فرمول ها رو پیاده کنم
ممنون می شم هر کسی که بتونه هر چه زودتر این یه خط کد رو بنویسه
با تشکر
beta=imread('koala.jpg');
beta=rgb2gray(beta);
[x,y]=size(beta);
alfa=zeros(x,y);
[x,y]=size(beta);
for i=1:768
for j=1:1024
alfa(i,j)=beta(x-i+1,y-j+1);
end
end
imshow(beta);
figure;
imshow(alfa,[]);

امیدوارم کمک کنه :
کد:
function [result]=fnImageRotation(img,thet)


% Get size of the image matrix
% m : number of rows
% n : number of columns
[m,n,p]=size(img);


if thet>1 | thet<0
    thet=thet/100;
end


mm = m*sqrt(2);
nn = n*sqrt(2);


for t=1:mm
   for s=1:nn
       
       i = uint16((t-mm/2)*cos(thet)+(s-nn/2)*sin(thet)+m/2);
       j = uint16(-(t-mm/2)*sin(thet)+(s-nn/2)*cos(thet)+n/2);
      
       if i>0 && j>0 && i<=m && j<=n           
          imgTemp(t,s,:)=img(i,j,:);
       end
      
   end
end


% return obtained image
result=imgTemp;


end
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
سلام
این کد هیچگونه مشکلی نداره و یکی از تمرین های درس پردازش تصویر من بوده. تنها اینکه این کد یک تابع است و باید در کد اصلی استفاده شود :gol:
 

javad_2

عضو جدید
سلام
این کد هیچگونه مشکلی نداره و یکی از تمرین های درس پردازش تصویر من بوده. تنها اینکه این کد یک تابع است و باید در کد اصلی استفاده شود :gol:
سلام
آره درستش کردم
اما یه مشکل عمده ی دیگه داره اونم اینه که عکس رو در زاویه هایی که بهش میدی به صورت صحیح نمی چرخونه
و اصلا چرخش هاش استاندارد نیست
من این کد رو از حالت تابع در آوردم و اگه تست کنی متوجه می شی من چی میگم
clc
clear
clf
teta=45 ;
beta=imread('koala.jpg');
beta=rgb2gray(beta);
[m,n]=size(beta);
alfa=zeros(m,n);
[m,n]=size(beta);

teta=teta/100;
mm = m*sqrt(2);
nn = n*sqrt(2);


for t=1:mm
for s=1:nn

i = uint16((t-mm/2)*cos(teta)+(s-nn/2)*sin(teta)+m/2);
j = uint16(-(t-mm/2)*sin(teta)+(s-nn/2)*cos(teta)+n/2);

if i>0 && j>0 && i<=m && j<=n
alfa(t,s,:)=beta(i,j,:);
end

end
end

imshow(beta);
figure;
imshow(alfa,[]);
 

javad_2

عضو جدید
کسی می تونه این مشکل رو برطرف کنه ؟؟
این کد تصویر رو در زاویه ی درست و استاندارد نمی چرخونه
اکه می تونید کمکم کنید
با تشکر
 

aabedeni

عضو جدید
سلام .منم یه سوال دراین زمینه دارم .بزرگنمایی تصویر بدون تابع resize در متلب (ولی با استفاده از متد این تابع ).میشه کمکم کنید .
 

Similar threads

بالا