View Full Version : توضیح قطعه کد
seied javad
سه شنبه 02 تیر 1394, 22:39 عصر
بسم رب المهدی
سلام
روزه نمازهاتون قبول حق
من چند روز دیگه تحویل پروژه (با نرم افزار matlab) دارم.
من پروژه تشخیص دستخط را انتخاب کردم قطعه کدی را از اینترنت پیدا کردم که درست هم عمل میکنه ولی فقط تا 5خط اول را تونستم بفهمم.
اگر یکی از دوستان پیدا بشه که بتونه خط به خط یا هرچقدر که میتونه بهم توضیح بده هم کار من راه میوفته هم من براش دعا میکنم.
قطعه کد:
clc
clear
close
x=imread('a1.jpg');y=rgb2gray(x);
z=edge(y);
imshow(z);
[n m]=size(z);
for i=1:n
histy(i)=sum(z(i,:));
end
i=1;
line=z*.0;
while(sum(histy>0))
a=find(histy>0);
i1=a(1);
histy=histy(i1:end);
a=find(histy==0);
i2=i1+a(1);
line(1:i2-i1+1,:,i)=z(i1:i2,:);
z=z(i2+1:end,:);
figure(i);imshow(line(:,:,i));
histy=histy(i2:end);i=i+1;
end
اینم فایل پروژه:
132556
التماس دعا
hhamidy
جمعه 05 تیر 1394, 14:11 عصر
سلام.
ممنون.
من سعی می کنم تا جایی که متوجه شدم توضیح بدم.
اگر مشکلی بود لطفا دوستانی که بیشتر تسلط دارن همکاری کنن.
ابتدا تصویر رو میخونید و اون رو به محدوده ی خاکستری میبرید و سپس لبه ی تصویر رو استخراج میکنید.
با اجرای خط هفتم و نمایش خروجی تا این مرحله متوجه میشید که الان شما یه ماتریس دارید که حاوی صفر و یک هست.
با مقایسه ی تصویر اصلیتون با این تصویر نمایش داده شده متوجه ی منظورم میشید.
تصویرتون سفید بوده و حاوی نوشته های سیاه رنگ و الان با اجرای این خط تصویر سیاهی رو دارید که فقط لبه ی این نوشته ها سفید هستن.اصطلاحا در تصویر هر چه که لبه بوده رو جدا کرده و اون رو به صورت منطقی به یک و بقیه رو به صفر تبدیل کرده.(صفر به معنی سیاه و یک به معنای سفید هست).
n تعداد ستون های تصویر و mتعداد سطرهای تصویرتون(یا همون تصویر لبه یابی شده) هست.
تا انتهای خط دهم اجرا بفرمایید.
و در پنجره ی ورک اسپیس ماتریس z رو ببینید.
حالا در پنجره ی ورک اسپیس histy رو نگاه کنید، عناصر z (که همون لبه های تصویر و غیر صفرها یا غیر پس زمینه های تصویر هستن) به صورت ستونی (هر ستون با عناصر خودش جمع شده).(داخل حلقه ای که میبینید از 1 تا تعداد ستون ها).
الان اگر به histy نگاه کنید، اولین عنصری که داخلش صفر هست عنصر 26ام هست و بعد از یک سری عدد عنصر 81ام دوباره صفر هست.(اعداد یعنی لبه هایی که موجود بود و صفر هم پس زمینه ها بود).
بعد تا زمانی که شرط حلقه برقراره:
میاد در متغیر a صفر های ماتریس histy رو پیدا میکنه و اولین صفری که باهاش برخورد کرده یعنی عنصر 26ام که دیدید رو داخل متغیر i1 قرار میده.
حالا histy رو از اون مقدار تا انتها در نظر میگیره.
دوباره می گرده تا عنصر صفر بعدی رو داخل ماتریس جدید histy پیدا کنه.
اولین صفری که پیدا کرد به اضافه ی مقدار قبل که همون 26 بود میکنه و متوجه میشه که عنصر 81ام در ماتریس اصلی صفر بعدی بوده.(من برای اجرای اولین حلقه دارم توضیح میدم).
بعد اومده و بخش بخش یا اصطلاحا خط خط در نظر گرفته.(line)
هر محدوده ای که به اینصورت پیدا شد رو داخل یه خط در نظر گرفته.
مثلا در مورد اول zهای از 26 تا 81 رو که داشتیم در متغیر از یک تا (81-26+1) و بعد i اینجا یعنی خط اول و بعد به ازای حلقه اینا پیمایش میشن.
بعد z رو از بقیش در نظر گرفته، تا بررسی کنه.(یعنی به ازای هر لبه تا لبه ی بعدی کار میکنه).
بعد تصویر رو نمایش داده و بعد هم histy رو از بقیه ی اون در نظر گرفته و i رو افزایش داده.
همینطور حلقه تکرار میشه.
seied javad
جمعه 05 تیر 1394, 18:28 عصر
سلام.
ممنون.
من سعی می کنم تا جایی که متوجه شدم توضیح بدم.
اگر مشکلی بود لطفا دوستانی که بیشتر تسلط دارن همکاری کنن.
ابتدا تصویر رو میخونید و اون رو به محدوده ی خاکستری میبرید و سپس لبه ی تصویر رو استخراج میکنید.
با اجرای خط هفتم و نمایش خروجی تا این مرحله متوجه میشید که الان شما یه ماتریس دارید که حاوی صفر و یک هست.
با مقایسه ی تصویر اصلیتون با این تصویر نمایش داده شده متوجه ی منظورم میشید.
تصویرتون سفید بوده و حاوی نوشته های سیاه رنگ و الان با اجرای این خط تصویر سیاهی رو دارید که فقط لبه ی این نوشته ها سفید هستن.اصطلاحا در تصویر هر چه که لبه بوده رو جدا کرده و اون رو به صورت منطقی به یک و بقیه رو به صفر تبدیل کرده.(صفر به معنی سیاه و یک به معنای سفید هست).
n تعداد ستون های تصویر و mتعداد سطرهای تصویرتون(یا همون تصویر لبه یابی شده) هست.
تا انتهای خط دهم اجرا بفرمایید.
و در پنجره ی ورک اسپیس ماتریس z رو ببینید.
حالا در پنجره ی ورک اسپیس histy رو نگاه کنید، عناصر z (که همون لبه های تصویر و غیر صفرها یا غیر پس زمینه های تصویر هستن) به صورت ستونی (هر ستون با عناصر خودش جمع شده).(داخل حلقه ای که میبینید از 1 تا تعداد ستون ها).
الان اگر به histy نگاه کنید، اولین عنصری که داخلش صفر هست عنصر 26ام هست و بعد از یک سری عدد عنصر 81ام دوباره صفر هست.(اعداد یعنی لبه هایی که موجود بود و صفر هم پس زمینه ها بود).
بعد تا زمانی که شرط حلقه برقراره:
میاد در متغیر a صفر های ماتریس histy رو پیدا میکنه و اولین صفری که باهاش برخورد کرده یعنی عنصر 26ام که دیدید رو داخل متغیر i1 قرار میده.
حالا histy رو از اون مقدار تا انتها در نظر میگیره.
دوباره می گرده تا عنصر صفر بعدی رو داخل ماتریس جدید histy پیدا کنه.
اولین صفری که پیدا کرد به اضافه ی مقدار قبل که همون 26 بود میکنه و متوجه میشه که عنصر 81ام در ماتریس اصلی صفر بعدی بوده.(من برای اجرای اولین حلقه دارم توضیح میدم).
بعد اومده و بخش بخش یا اصطلاحا خط خط در نظر گرفته.(line)
هر محدوده ای که به اینصورت پیدا شد رو داخل یه خط در نظر گرفته.
مثلا در مورد اول zهای از 26 تا 81 رو که داشتیم در متغیر از یک تا (81-26+1) و بعد i اینجا یعنی خط اول و بعد به ازای حلقه اینا پیمایش میشن.
بعد z رو از بقیش در نظر گرفته، تا بررسی کنه.(یعنی به ازای هر لبه تا لبه ی بعدی کار میکنه).
بعد تصویر رو نمایش داده و بعد هم histy رو از بقیه ی اون در نظر گرفته و i رو افزایش داده.
همینطور حلقه تکرار میشه.
ممنون و تشکر دستت دردنکنه چون فردا باید تحویل بدم
فقط چندتا خطو متوجه نشدم
11 - 12 - 19 - 20 - 21 - 22
و میتونی یک توضیح کلی بدی از طریقه کار کردش من وقتی حرف B را شبیه R میکنم بازم تشخیص میده. مگه اینا نیاز به بانک نداره؟
بازم ممنون
خدا خیرت بده
hhamidy
جمعه 05 تیر 1394, 19:09 عصر
ممنون و تشکر دستت دردنکنه چون فردا باید تحویل بدم
فقط چندتا خطو متوجه نشدم
11 - 12 - 19 - 20 - 21 - 22
و میتونی یک توضیح کلی بدی از طریقه کار کردش من وقتی حرف B را شبیه R میکنم بازم تشخیص میده. مگه اینا نیاز به بانک نداره؟
بازم ممنون
خدا خیرت بده
من ocr کار نکردم.
فقط در مورد کدی که گذاشته بودید توضیح دادم.
اما وقتی از بانک تصویر می گیرید یه تعداد تصویر هست نه یک عدد.
اون بحثش فرق می کنه.
از صحت کدتونم من اطلاع ندارم.
قسمتایی که فرمودید رو هم توضیح داده بودم.
فقط 11و 12 هم داره یه مقدار ابتدایی تعریف می کنه برای این متغیرا.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.