# Native Code > برنامه نویسی در Delphi >  Image Recognition

## LordMMD

سلام 

آقا، شدیدا احتیاج به یک الگوریتم یا راهنمایی در مورد Image Recognition دارم . 

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

به کوچکترین اطلاعات در این مورد نیازمندم!!!!!

----------


## *IsRaEl*

> میخوام بدونم که چطور میشه که در یک تصویر که مثلا چهار تا عکس گنجونده شده، چطور میشه این چهار تا عکس رو از هم تفکیک کرد و در فایلهای جدا گانه save کرد؟؟؟


این عکسهایی که میخوای از هم تفکیک بشن بر چه اساسی مشخص میشن؟

----------


## LordMMD

این عکسها در حقیقت عسهایی هستند که با اسکنر اسکن شدن ، و پشت صحنه اونها سیاه هست(ولی نه سیاه مطلق، میدونی که!!!) و چون کار جدا سازی اونها با نرم افزارهایی مثل PhotoShop به صورت دستی انجام میشه ، من میخواستم که با این برنامه اون رو به صورت مکانیزه انجام بدم.

از توجه شما متشکرم

----------


## Kambiz

رو اینترنت بگرد دنبال Edge Detection

----------


## LordMMD

من خیلی درباره این مطلب جستجو کردم یه چیزهایی هم پیدا کردم و هنوز هم دارم میگردم، ولی چون زیاد در زمینه Image Processing آشنا نیستم، اگه یه بزرگواری پیدا بشه و به من کمک کنه خیلی ممنونش میشم

از راهنمایی شما متشکرم

----------


## Inprise

سلام ؛

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

<span dir=ltr>

_An edge is not a physical entity, just like a shadow.  It is where the picture ends and the wall starts.  It is where the vertical and the horizontal surfaces of an object meet.  It is what happens between a bright window and the darkness of the night.  Simply speaking, it has no width.  If there were sensor with infinitely small footprints and zero-width point spread functions, an edge would be recorded between pixels within in an image.  In reality, what appears to be an edge from the distance may even contain other edges when looked close-up.  The edge between a forest and a road in an aerial photo may not look like an edge any more in a image taken on the ground.  In the ground image, edges may be found around each individual tree.  If looked a few inches away from a tree, edges may be found within the texture on the bark of the tree.  Edges are scale-dependent and an edge may contain other edges, but at a certain scale, an edge still has no width._
</span>

موفق باشی

----------


## امیر-نا

با سلام
البته من عددی نیستم که بخام صحبت بکنم ولی می تونین برای مطالعه در مورد Image Processing 
از کتاب فارسی (( ماشین بینایی و اصول پردازش تصویر  ترجمه: دکتر خلیل خلیلی  انتشارات جهان نو)) استفاده کنین که مقدمه ای برای Image Processing  و مباحثی که ویژه در کار Roboot و بینایی ربات  هستند و تشخیص لبه هاو .......
در اون مطالعه کنین.


 :|

----------


## masoode

یک کتاب که اسمش الأن یادم نیست (ولی تو مایه‌های پردازش تصویر) که نویسنده اون گنرالس است. این کتاب مرجع تمام پردازش تصویری ها است.

----------


## امیر-نا

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

ولی کتاب بالا "ماشین بینایی" هم زود مطلب رو گفته هم خیلی باحاله.

نمیدونم
 :?  :(

----------


## amirsadeghi

حالا نمیشه شما که جستجو کردی اطلاعاتت رو در اختیار ما قرار بدی؟

----------


## MNosouhi

با توجه به تیره بودن پشت زمینه و ابزارهایی که برای پردازش تصویر وجود داره ، نباید نوشتن چنین برنامه ای کار پیچیده ای باشه

----------


## ali_abbasi22145

سلام
این مشکل شما  با همکاری من و دوستان دیگر حل شده است و bug های آن را به کمک هم گرفته ایم و چندین ماه سر این مسله کار کردیم ....

----------


## MNosouhi

> این مشکل شما با همکاری من و دوستان دیگر حل شده است و bug های آن را به کمک هم گرفته ایم و چندین ماه سر این مسله کار کردیم ....


کجا این مسئله رو مطرح کردید؟
لطفا بیشتر توضیح بدید.

----------


## ali_abbasi22145

> کجا این مسئله رو مطرح کردید؟
> لطفا بیشتر توضیح بدید.


جایی مطرح نکردیم بلکه خودم این مورد را می خواستم و حلش کردیم.

----------


## MNosouhi

> جایی مطرح نکردیم بلکه خودم این مورد را می خواستم و حلش کردیم.


امکانش هست که یه نمونه با سورس بگزارید؟

----------


## مصطفی ساتکی

در مورد پردازش تصویر می تونم کمکتون کنم

----------


## amirsadeghi

از الگوریتم Chain Code استفاده کن

----------


## MNosouhi

> از الگوریتم Chain Code استفاده کن


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

----------


## amirsadeghi

در گوگل سرچ کن منابع بسیار خوبی پیدا می کنی

----------


## ali_abbasi22145

سلام
به زودی exe کامل برنامه را اینجا می گذارم.

----------


## amirsadeghi

فایل اجرایی به چه درد بچه ها می خوره
بچه ها می خوان کد ها رو بررسی کنن یاد بگیرن
فکر می کنم باز هم گوگل

----------


## MNosouhi

> سلام
> به زودی exe کامل برنامه را اینجا می گذارم.


البته اگر نمونه کد باشه که بهتره ، اما همون فایل اجرایی هم میتونه ایده بده.



> فایل اجرایی به چه درد بچه ها می خوره
> بچه ها می خوان کد ها رو بررسی کنن یاد بگیرن
> فکر می کنم باز هم گوگل


به هر حال آقای عباسی دارن یه کار میکنن .
شما هم اگه واقعا میخای کمک کنید ، به جای اینکه دائم کلمه code chain و google رو تبلیغ کنید سعی کنید به صورت عملی وارد کار بشید .

----------


## amirsadeghi

تبلیغ نیست پیشنهاد راه حله و ایده میده
از فایل اجرایی برای بررسی کد که بهتره

----------


## ali_abbasi22145

سلام
این هم exe و تست کنید اگر باگی هم دیدید که یک SHEET_PHOTO را جداسازی نکرد آن SHEET_PHOTO را به من email کنید.
 خیلی خوشحال می شوم تا باگ احتمالی را هم حل کنم .

----------


## MNosouhi

ممکنه در مورد الگوریتمی که استفاده کرده اید توضیح دهید ، بخصوص برای اون قسمت جداسازی k .



> خیلی خوشحال می شوم تا باگ احتمالی را هم حل کنم .


تصویر زیر رو نمیتونه پردازش کنه.

----------


## ali_abbasi22145

سلام
1-من گوشه های عکسها را پیدا می کنم و عکس را تشخیص می دهم و بعد یکی یکی جدا می کنم.
2-دور هر تصویر یک چهارضلعی می کشم و در دو تا از تصویرهای شما در یک چهارضلی دورشان تلاقی دارند و این اشتباه شما است.
و اصول اسکن برای جداسازی را رعایت نکردید.
شما هر تعداد عکس که می خواهید در اسکنر بگذارید و از هم فاصله بدهید و کج ولوج نگذارید می بینید که به راحتی جداسازی می کند.
من چند کاربر دارم که حدود 15000 عکس را به این طریق جداسازی کرده اند!

----------


## MNosouhi

> 2-دور هر تصویر یک چهارضلعی می کشم و در دو تا از تصویرهای شما در یک چهارضلی دورشان تلاقی دارند و این اشتباه شما است.





> از هم فاصله بدهید و کج ولوج نگذارید


یعنی شما همه اینها رو به کاربرهاتون هم گفتید؟ بهشون گفتید که مواظب باشید که چهارضلعی های فرضی که شما در برنامه نویسی ازش استفاده کرده اید با هم تلاقی نداشته باشن؟ فکر نمی کنم منطقی باشه که کاربران رو درگیر این مسائل کنید ، هدف از نوشتن برنامه ساده کردن و سرعت بخشیدن به کارهاست و برنامه خوب ، برنامه ای است که تحت هر شرایطی کار کنه ، نه اینکه به کاربر بگید که تصاویر رو در شرایط خاصی نسبت به هم قرار بده ، تنها شرط منطقی که میتونه وجود داشته باشه اینه که یه هنگام اسکن ، عکس ها روی هم قرار نگیرن.



> اصول اسکن برای جداسازی را رعایت نکردید.


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

----------


## ali_abbasi22145

سلام
دوست من چرا مسئله را سختش می کنید!!!
در اسکنر A4 شما حدود 20 عکس جا می شود و عکس اگر حدودا راست بگذارید به چهارضلی فرضی من هم توجه نکنید ! ( نه خیلی کج کنید) روش فوق همه عکسها را جداسازی می کندو اینرا که گفتم لطفا تست کنید.
اگر از قصد عکسها را کج کنید که لازم هم نیست آنوقت فاصله ها را زیادتر کنید هم دقیق کار می کند.
و در بالا هم گفتم که: من چند کاربر دارم که حدود 15000 عکس را به این طریق جداسازی کرده اند! و خیلی هم از آن راضی هستندو انه در اندازه یک کاربر DATA ENTRY کار بلدهستند پس مطمئنا برایشان کارایی دارد و روتین عالی کار می کند این گفته کاربران من است!

درضمن بدنیست گفته اساتید دیگر را هم گوش فرا دهیم که فرموده اند:
سلام ؛

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

<span dir=ltr>


An edge is not a physical entity, just like a shadow. It is where the picture ends and the wall starts. It is where the vertical and the horizontal surfaces of an object meet. It is what happens between a bright window and the darkness of the night. Simply speaking, it has no width. If there were sensor with infinitely small footprints and zero-width point spread functions, an edge would be recorded between pixels within in an image. In reality, what appears to be an edge from the distance may even contain other edges when looked close-up. The edge between a forest and a road in an aerial photo may not look like an edge any more in a image taken on the ground. In the ground image, edges may be found around each individual tree. If looked a few inches away from a tree, edges may be found within the texture on the bark of the tree. Edges are scale-dependent and an edge may contain other edges, but at a certain scale, an edge still has no width.

</span>

موفق باشی

----------


## amirsadeghi

حالا رو سورسش هم یکم بحث کنید

----------


## مصطفی ساتکی

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

* برای جداسازی چندین تصویر در داخل یک فرم که دارای Transparent می باشد بایستی کارهای زیر را انجام دهیم
1- ابتدا بایستی تابعی بنویسیم که Bitmap رنگی را دریافت کرده و با توجه Transparent آن را به یک تصویر سیاه و سفید  تبدیل کند .
2- در این تصویر سیاه و سفید تولید شده رنگ Transparent به ناحیه سفید و بقیه نقاط در تصویر حاصله به نقاط سیاه تبدیل می شود . سپس هر کدام از این ناحیه سیاه بعنوان توکن در نظر گرفته و با الگوریتم 8 خانه مجاور کلیه ابعاد این توکن ها را تعیین می کنیم .(البته بهتر است که از روش آدرس دهی حافظه و صف استفاده شود و تصویر مورد نظر PixelFormat کمتر از 8 باشد )
3- با توجه به ابعاد بدست آمده توکن ها هر یک از ابعاد مورد نظر را در یک Bitmap کپی کرده و زاویه هر یک از این Bitmap را نسبت به افق بدست آورده و سپس عملیات Rotate را انجام می دهیم

----------


## مصطفی ساتکی

این هم تابعی که گزینه شماره 1 یعنی عمل فیلتر کردن تصویر رنگی

  PTriple = ^ TTriple;
  TTriple = Array [0..65535] of TRGBTriple;
  POne = ^ TOne ;
  TOne = Array[0..65535] of Byte;

function CBFilterToBW(ABitmap: TBitmap): TBitmap;
var i , j : integer;
    Row24 : PTriple;
    Row8 : POne;
    TransColor : TRGBTriple;
begin
 Result := TBitmap.Create;
 with Result do
  begin
   Width := ABitmap.Width;
   Height := ABitmap.Height;
   PixelFormat := pf8bit;
  end;

 Row24 := ABitmap.ScanLine[0];
 TransColor := Row24[0];

 for i := 0 to ABitmap.Height-1 do
  begin
   Row24 := ABitmap.ScanLine[i];
   Row8 := Result.ScanLine[i];
   for j := 0 to ABitmap.Width-1 do
    if (Row24[j].rgbtBlue = TransColor.rgbtBlue) and
       (Row24[j].rgbtGreen = TransColor.rgbtGreen) and
       (Row24[j].rgbtRed = TransColor.rgbtRed) then
      Row8[j] := 255
    else Row8[j] := 0;
  end;
end;

----------


## Valadi

جناب Delphi_CAT
اگر امکان داره سورسهای مثال هایی که اشاره کردید  را قرار بدید 
موفق وموید باشی

----------


## مصطفی ساتکی

1- این رویه DC مربوط به مرحله قبل را دریافت کرده و ابعاد کلیه توکن های موجود که همان تصاویر در فریم اصلی هستند را شناسایی می کند.
در اینجا تابع fill رو قرار ندادم همان طور که گفتیم براینکه اینکار با سرعت بالا صورت بگیره به روش آدرس دهی و صف و pixelFormat کمتر از 8 استفاده نماید .
procedure GetTokens(DC:HDC; BW,BH : Integer);
var i , j : integer;
    row : PTriple;
    CountRect : integer;
    ROut : TRect;
begin
  FillColor := RGBTriple(clRed);
  TextColor := RGBTriple(clBlack);
  Bitmap := TBitmap.Create;
  Bitmap.Width := BW;
  Bitmap.Height := BH;
  BitBlt(Bitmap.Canvas.Handle,0,0,BW,BH,DC,0,0,SRCCO  PY);
  Bitmap.PixelFormat := pf8bit;
  CountRect:=0;
  SetLength(Rects,0);
   for i := 0 to Bitmap.Height-1 do
   begin
    row := Bitmap.ScanLine[i];
    for j := Bitmap.Width-1 downto 0 do
     if CompareRGBTriple(row[j],TextColor) then
     begin
       ROut:= Fill2(j,i);
       if ROut.Right-ROut.Left>0 then
        begin
         inc(CountRect);
         SetLength(rects,CountRect);
         rects[CountRect-1].x1:=ROut.Left;
         rects[CountRect-1].y1:=ROut.Top;
         rects[CountRect-1].x2:=ROut.Right;
         rects[CountRect-1].y2:=ROut.Bottom;
         Rects[CountRect-1].pnt:=Point(j,i);
        end;
     end;
   end;
end;

----------


## مصطفی ساتکی

باید توجه داشته باشید که اگر تصویر اصلی دارای Resualtion بیشتر از 300 (حد نرمال) باشد بوسیله روش های درونیابی آنرا به 300 کاهش داده و این تغییرات مقیاس را به کلیه فازها اعمال نماییم . هر چقدر resualtion را کاهش دهیم کا با سرعت بشتری انجام می گیرد .

----------


## مصطفی ساتکی

این تابع هم با توجه به ابعاد بدست آمده تصاویر را از فریم اصلی جدا کرده زاویه آنها را نسبت به افق بدست آورده و سپس آنها را دوران می دهد این 2 عمل بدست آوردن زاویه و چرخش را هم می توانید دستی و هم با Image en انجام دهید و سپس یک تابع دیگر برای اینگه تصویر چرخش خورده به صورت کامل و فوکس شده در اختیار داشته باشیم

function ExtractPicture(ABitmap: TBitmap): TBitmapArray;
Const Dis = 10;
var len ,i : integer;
    Grade : integer;
begin
 len := Length(Rects);
 setlength(Result,len);
 for i := 0 to len-1 do
  begin
   Result[i]:= TBitmap.Create;
   with Result[i] do
    begin
     Width := Rects[i].x2-Rects[i].x1 + Dis;
     Height := Rects[i].y2-Rects[i].y1 + Dis;
     PixelFormat := pf24bit;
     BitBlt(Canvas.Handle,Dis,Dis,Width-dis,Height-dis,ABitmap.Canvas.Handle,Rects[i].x1,Rects[i].y1,SRCCOPY);
     Grade := GetGrade(Result[i]);
     Result[i].Assign(Rotate(Result[i],Grade));
     Result[i].Assign(GetFocusPicture(Result[i]));
    end;
  end;
end;

----------


## مصطفی ساتکی

این هم رکورد استفاده شده در این برنامه و بدست اوردن تصویر فوکوس از تصویر چرخش داده شده
   TTokenRegion=record
   x1,
   y1,
   x2,
   y2 : integer;
   LeftID,
   RightID ,
   LeftDis,
   RightDis : integer;
   TokenType : byte;
   pnt :TPoint;
  end;

var
        Rects :Array  of TTokenRegion;
        FillColor ,TextColor : TRGBTriple;

function GetFocusPicture(ABitmap: TBitmap): TBitmap;
var i , j : integer;
    Row : PTriple;
    X1,Y1,X2,Y2 : integer;
    TransColor : TRGBTriple;
begin
 row := ABitmap.ScanLine[0];
 TransColor := row[0];
 X1 := -1;
 Y1 := -1;
 X2 := -1;
 Y2 := -1;
 for i := 0 to ABitmap.Height-1 do
  begin
   row := ABitmap.ScanLine[i];
   for j := 0 to ABitmap.Width-1 do
    if not( (Row[j].rgbtBlue = TransColor.rgbtBlue) and
            (Row[j].rgbtGreen = TransColor.rgbtGreen) and
            (Row[j].rgbtRed = TransColor.rgbtRed)) then
        begin
         Y1 := i;
         Break;
        end;
    if Y1 <> -1 then Break;
  end;
 for i := ABitmap.Height-1 downto 0 do
  begin
   row := ABitmap.ScanLine[i];
   for j := 0 to ABitmap.Width-1 do
    if not( (Row[j].rgbtBlue = TransColor.rgbtBlue) and
            (Row[j].rgbtGreen = TransColor.rgbtGreen) and
            (Row[j].rgbtRed = TransColor.rgbtRed)) then
        begin
         Y2 := i;
         Break;
        end;
    if Y2 <> -1 then Break;
  end;
 for j := 0 to ABitmap.Width-1 do
   for i := 0 to ABitmap.Height-1 do
    begin
     row := ABitmap.ScanLine[i];
     if not( (Row[j].rgbtBlue = TransColor.rgbtBlue) and
            (Row[j].rgbtGreen = TransColor.rgbtGreen) and
            (Row[j].rgbtRed = TransColor.rgbtRed)) then
        begin
         X1 := j;
         Break;
        end;
      if X1 <> -1 then Break;
    end;
 for j := ABitmap.Width-1 downto 0 do
   for i := 0 to ABitmap.Height-1 do
    begin
     row := ABitmap.ScanLine[i];
     if not( (Row[j].rgbtBlue = TransColor.rgbtBlue) and
            (Row[j].rgbtGreen = TransColor.rgbtGreen) and
            (Row[j].rgbtRed = TransColor.rgbtRed)) then
        begin
         X2 := j;
         Break;
        end;
      if X2 <> -1 then Break;
    end;
 Result := TBitmap.Create;
 with Result do
  begin
   PixelFormat := pf24bit;
   Width := X2 - x1;
   Height := Y2 - Y1;
  end;
 BitBlt(Result.Canvas.Handle,0,0,Result.Width,Resul  t.Height,ABitmap.Canvas.Handle,X1,Y1,SRCCOPY);
end;

----------


## ali_abbasi22145

> ممکنه در مورد الگوریتمی که استفاده کرده اید توضیح دهید ، بخصوص برای اون قسمت جداسازی k .
> 
> تصویر زیر رو نمیتونه پردازش کنه.


سلام
چرا من جدیدا تست کردم و حواسم نبود که اگر تیک ها را بردارید جداسازی می کند.

----------


## وصال1386

آقا این برنامه بعد از برش عکسها رو کجا سیو میکنه !!

----------


## ali_abbasi22145

> حالا رو سورسش هم یکم بحث کنید


سلام
سورسش را خشکه حساب می کنم.

----------


## MNosouhi

آقا یا خانم Delphi_CAT ، آیا مطمئنید کدهایی که گذاشته اید صحیح و کامل هستند ، من که نتونستم ران کنم.
در صورت امکان توابعتون رو تحت عنوان یک برنامه آپلود کنید.

----------


## مصطفی ساتکی

همانطور که گفتم نوشتن تابع fill را به عهده خودتون گذاشتم بقیش هم در ست کار میکنه

----------


## MNosouhi

مثلا TBitmapArray چیه ؟ کجا تعریف شده؟ یا تو کدوم یونیت میتونم پیداش کنم. 
یا مثلا روی FillColor := RGBTriple(clRed); خطای Invalid TypeCast میده.

----------


## وصال1386

> بقیش هم در ست کار میکنه


با تشکر  :تشویق:  
من برنامه شمارو نصب کردم .عالی  بود ولی ظاهرا عکس های برش خورده سیو نمی شن
البته شاید  هم من اشتباه میکنم.

----------


## mahboob

این یک مثال از تفکیک تصاویر هست که از imageEN در اون استفاده شده

----------


## مصطفی ساتکی

و این هم چیزهایی که فراموشم شده بود جناب MNosouhi
  TBitmapArray = Array of TBitmap;

Function RGBTriple(R,G,B : byte):TRGBTriple;Overload;
begin
 Result.rgbtBlue := B;
 Result.rgbtGreen := G;
 Result.rgbtRed := R;
end;

Function RGBTriple(Color : TColor):TRGBTriple;Overload;
var R,G,B : byte;
begin
 R := GetRValue(Color);
 G := GetGValue(Color);
 B := GetBValue(Color);
 Result.rgbtBlue := B;
 Result.rgbtGreen := G;
 Result.rgbtRed := R;
end;

----------


## مصطفی ساتکی

جناب mahboob اون فقط یک exeی که اینکارو انجام میده در بالا کل اون مراحلو به همراه سورس که نوشتم توضیح دادم

----------


## MNosouhi

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

----------


## مصطفی ساتکی

متغیری به نام Bitmap از نوع TBitmap رو به صورت Global تعریف کنید

----------


## MNosouhi

> متغیری به نام Bitmap از نوع TBitmap رو به صورت Global تعریف کنید


هنوز 8 تا  خطای دیگه داره ، اصلا بیخیالش .



> این یک مثال از تفکیک تصاویر هست که از imageEN در اون استفاده شده


از چه ورژنی از ImageEn استفاده کردید؟

----------


## وصال1386

آقا این برنامه عکسهای برش زده شده رو کجا ذخیره میکنه . من به این برنامه نیاز دارم .
لطفا راهنمایی کنید

----------


## مصطفی ساتکی

توخروجی تابع ExtractPicture  خودش  آرایه دینامیک Tbitmap تصاویر بر می گرده

----------


## ali_abbasi22145

> این یک مثال از تفکیک تصاویر هست که از imageEN در اون استفاده شده


سلام
این کار مشترک من و ImageEN است و ورژن که ImageEN دارد برای یکسری عکسها bug دارد.
و در برنامه من آن bug ها گرفته شده است و تست سنگین هم شده است!

----------


## وصال1386

*آقا کسی نمیگه این عکسهایی  برش  خورده کجا ذخیره میشن* 
*بابا ای وال..*

----------


## MNosouhi

> آقا کسی نمیگه این عکسهایی برش خورده کجا ذخیره میشن


برنامه رو که با سورس گزاشتن ، اون قسمت ذخیره عکس های برش خورده رو خودت اضافه کن.

----------


## Mahmood_M

سلام دوستان ...
ولی این سورس کار خاصی نمی کنه !!
منظورم اینه که تمام کار رو کامپوننت انجام میده ...
فکر نکنم بدون کامپوننت بشه با این چهار خط کد این کار رو انجام بده ...

کسی از دوستان دقیقا با نحوه این کار آشنا نیست ...
البته هنوز کدهای جناب " Delphi_Cat " را بررسی نکردم ... !

موفق باشید ...

----------


## وصال1386

اساتید محترم من برنامه نویسی دلفی بلدنیستم اما نیاز مبرم به این برنامه ای که زحمتشو
کشیدید دارم که بتونه عکسهای اسکن شده رو برش بزنه و سیو کنه .
لطفا قسمت  سیو رو هم اضافه بفرمایید .
باز هم متشکرم . :خجالت:   :خجالت:

----------


## وصال1386

بازم به VFPکارهای خودمون اینجا حتی جواب سلام ما رو  هم ندادن!
اساتید منتظر کمکتون هستم.

----------


## مصطفی ساتکی

جهت اطلاع به من mial بفرستید . Delphi_CATco@yahoo.com

----------


## Hadizadeh

دوستان اولین نکته ای که باید اشاره کنم اینه که سعی کنید اگه می خواهید برنامتون سرعت بالا داشته باشه از Canvas استفاده نکنید. ثانیا آقای Delphi_CAT از توکن بحث می کنند که این غلطه! به این موارد توکن نمی گن! شما می تونستید بگید پیکسل های مرزی به دست آمده پس از دو مرحله 1- آستانه گیری و 2- لبه یابی ، وقتی می گید توکن یه پردازش تصویر کار یک فکر دیگه می کنه! (غیر از این مورد) و یه مخابراتی فکر شبکه و پروتکل های اون رو می کنه! شما در تمام این پست ها اشاره ای به نحوه آستانه یابی به عنوان یک عملیات پیش پردازش نکردید. اون Chain Codi رو هم که یکی از دوستان اشاره کرده بود در حقیقت جزو عملیات شناسایی مرز هست و زیاد به درد نمی خوره. یه راه خوب اینه که پس از لبه یابی تصویر از الگوریتم های تشخیص گوشه مثل Susan استفاده کنی و بعد همون مراحلی رو که دوستان اشاره کردن انجام بدی. اما راه ساده تر استفاده از تبدیل Hough هست. به هر حا از اینجا به بعد رو گوگل کنید! موفق باشید!

----------


## smakhavan

تابع SeparateObjects در مجموعه ImageEn وجود ندارد. شما از کدام ورژن آن استفاده کرده اید!!؟

----------


## Batman

با سلام
دوستان بهتر نیست به تاریخ پست ها یه نگاهی بندازید؟

----------

