پنج شنبه 28 تیر 1397 | Thursday 19 th of July 2018 صفحه اصلی گروه الکترونیکی کامپیوتر
4 - 3 - 6 - شرح توابع اصلی نرم افزار

کتابخانه‌های QuantizedImage.hو QBitmap.hبه لحاظ مفهومی اهمیت چندانی ندارند و برای کار با تصاویر bitmapعادی و همچنین تصاویر کوانتیزه شده که معمولا یک تصویر با تعداد رنگ کم است‌، استفاده می‌شوند. توابعی که برای انها پیاده‌سازی شده است، توابع اولیه و پایه کار با تصویر است.

class    CCH{

   private:

      int        max_dis;

      int        color_num;

      float     *data;

   public:

                 CCH();

                 CCH(CCH &);

                 CCH(int ,int );

                ~CCH();

      void       Reconfigure(int ,int );

      void       Free();

inline

      void       Inc(int ,int ,int );

      void       SetAll(float );

      void       SetCell(int ,int ,int ,float );

      void       Normalize();

      void       SetDiagonalToZero();

      CCH       &operator=(CCH &);

inline

      float      GetCell(int ,int ,int );

      float      GetSumOfAll();

      float      GetMean();

      float      BestMatchingFactor(CCH &);

      float      CorrelationCoefficient(CCH &,float &);

      CCH        Multiply(float );

      CCH        SubtractFromMean();

      CCH        IncreaseDistanceScale(int );

      CCH        Rescale(float );

 

      void       CalculateCCH(QuantizedImage &,int );

      void       CalculateCECH(QuantizedImage &,int ,int ,Image_Region &,TForm *);

      float      Calculate_De(CCH &,Image_Region &,float ,float );

      void       PrintDistanceHistogram(int ,int ,TMemo *);

      void       PrintDistanceSlice(int ,TMemo *);

      void       PrintForColorPair(int ,int ,TMemo *);

};

این کلاس داده‌ها و توابع مربوط به ماتریس CCHو CECHرا شامل می‌شود. داده‌های کلاس معرف یک ماتریس سه بعدی است که دو پارامتر max_disو color_numابعاد ماتریس را به صورت color_num*color_num*max_disمشخص می‌کنند.

void       Inc(int ,int ,int );

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

void       SetAll(float );

همه عناصر ماتریس CCHرا به عددی که به عنوان ارگومان دریافت کرده، مقدار‌دهی می‌کند.

void       SetCell(int ,int ,int ,float );

یک عنصر از ماتریس CCHرا مستقیماً مقداردهی می‌کند.

void       Normalize();

تک تک عناصر ماتریس را بر مجموع عناصر ماتریس تقسیم می‌کند. این کار موجب می‌شود تا پس از نرمال‌سازی مجموع عناصر ماتریس 1 شود.

float      GetCell(int ,int ,int );

مقدار یک عنصر مشخص از ماتریس CCHرا باز می‌گرداند.

float      GetSumOfAll();

مجموع همه عناصر ماتریس CCHرا محاسبه می‌کند.

float      GetMean();

میانگین عناصر را محاسبه می‌کند.

float      BestMatchingFactor(CCH &);

یک ماتریس CCHرا می‌گیرد و ان را با خود شی مقایسه می‌کند و بهترین ضریب تطابق را باز می‌گرداند.

float      CorrelationCoefficient(CCH &,float &);

ضریب همبستگی خطی بین ماتریس CCHورودی و خود شی را باز  می‌گرداند.

CCH        Multiply(float );

همه عناصر ماتریس را در یک عدد اعشاری ضرب می‌کند.

CCH        SubtractFromMean();

همه عناصر ماتریس را از میانگین کم می‌کند و حاصل را به صورت یک CCHجدید بر می‌گرداند.

CCH        IncreaseDistanceScale(int );

مقیاس فاصله را در ماتریس افزایش می‌دهد. به عبارت دیگر برای هر عنصر از ماتریس فاصله را در ضریب مقیاس جدید ضرب می‌کند. نتیجه به صورت یک ماتریس CCHجدید برگردانده می‌شود.

CCH        Rescale(float );

مانند قبلی است با این تفاوت که ضریب مقیاس می‌تواند اعشاری باشد.

void       CalculateCCH(QuantizedImage &,int );

یک تصویر کوانتیزه شده را دریافت می‌کند و CCHانرا محاسبه کرده و در خود ذخیره می‌کند.

void       CalculateCECH(QuantizedImage &,int ,int ,Image_Region &,TForm *);

یک تصویر کوانتیزه شده دریافت می‌کند و در یک ناحیه مشخص (Image_Region) ماتریس CECHمربوط به ان را محاسبه می‌کند.

float      Calculate_De(CCH &,Image_Region &,float ,float );

معیار شباهت بین خود شی با CCHیک ناحیه از تصویر ورودی محاسبه می‌کند.

 

void       PrintDistanceHistogram(int ,int ,TMemo *);

نمودار فاصله را برای دو رنگ مختلف روی یک شی TMemoنمایش می‌دهد. نمودار فاصله یک بردار از اعداد است که تعداد جفت پیکسل‌های با دو رنگ مشخص را در فواصل مختلف نشان  می‌دهد.

void       PrintDistanceSlice(int ,TMemo *);

مشابه تابع بالاست با این تفاوت که برای یک فاصله خاص و برای ترکیبات مختلف رنگی یک جدول دو بعدی نمایش می‌دهد.

class  ContinuousGrayImage{

   friend  void  LayoutChecking(QuantizedImage &i,CCH &,ContinuousGrayImage &,int ,int );

   private:

     int                  width , height;

     float              **pixels;

   public:

                          ContinuousGrayImage();

                          ContinuousGrayImage(int ,int );

                         ~ContinuousGrayImage();

     void                 Resize(int ,int );

     void                 Free();

inline

     void                 SetPixel(int ,int ,float );

inline

     float                GetPixel(int ,int );

     void                 SetAll(float );

     float                GetMax();

     void                 Scale(float );

     void                 Scale(float ,float );

     void                 LogScale(float ,float );

     void                 LoadFromQBitmap(QBitmap &);

     void                 CopyToQBitmap(QBitmap &);

     void                 Negetive();

     void                 Mean3x3Filter(float *,int );

     void                 Mean5x5Filter(float *,int );

     void                 Binarization(float );

     ContinuousGrayImage &CopyFrom(ContinuousGrayImage &);

};

این کلاس برای کار با تصاویر سطح خاکستری است که مقدار سطح خاکستری در هر نقطه می‌تواند یک عدد اعشاری پیوسته باشد.

ContinuousGrayImage();

ContinuousGrayImage(int ,int );

~ContinuousGrayImage();

سازنده‌ها و مخرب کلاس.

void                 Resize(int ,int );

تغییر اندازه تصویر.

void                 Free();

ازادسازی فضای گرفته شده به صورت ارایه پویا.

 

void                 SetPixel(int ,int ,float );

مقداردهی به یک پیکسل.

 

float                GetPixel(int ,int );

دریافت مقدار یک پیکسل.

 

void                 SetAll(float );

مقداردهی به همه پیکسل‌ها.

 

float                GetMax();

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

 

void                 Scale(float );

مقیاس تصویر را تغییر می‌دهد.

 

void                 Scale(float ,float );

مشابه تابع قبلی است.

 

void                 LogScale(float ,float );

مقیاس تصویر را به صورت لگاریتمی تغییر می‌دهد.

 

void                 LoadFromQBitmap(QBitmap &);

تصویر را از یک شی QBitmapکه یک تصویر نگاشت بیتی معمول است، بارگذاری می‌کند.

 

void                 CopyToQBitmap(QBitmap &);

تصویر را در یک QBitmapکپی می‌کند.

void                 Negetive();

تصویر را نگاتیو می‌کند.

void                 Mean3x3Filter(float *,int );

اعمال فیلتر 3 در 3 روی تصویر.

void                 Mean5x5Filter(float *,int );

اعمال فیلتر 5 در 5.

void                 Binarization(float );

دو سطحی‌سازی تصویر.

ContinuousGrayImage &CopyFrom(ContinuousGrayImage &);

کپی کردن یک شی دلخواه از کلاس در خود شی.

 - کتابخانه ColorConversation.hشامل کدهای لازم برای کار با رنگ‌ها است.

LabColor   RGB2Lab(float R,float G,float B);

برای تبدیل از فضای رنگ RGBبه فضای Labبه کار می‌رود.

float   RGBHue(float R,float G,float B);

مقدار Hueبرای یک رنگ مشخص را باز می‌گرداند.

 

class   ISCC_NBS{

                   ISCC_NBS();

                   ISCC_NBS(char *);

      int          LoadColors(char *);

      MColor       GetNthCenter(int num) { return center_rgb_colors[num]; }

      MColor       GetNthQColor(int num) { return q_rgb_colors[num]; }

      MColor       GetNearestAsColor(float ,float ,float );

      int          GetNearestAsInt(float ,float ,float );

};

این کلاس برای پیاده‌سازی اعمال مرتبط با رنگ‌های ISCC BNSبه کار می‌رود که برای گسسته‌سازی رنگ‌ها استفاده می‌شود.

ISCC_NBS();

ISCC_NBS(char *);

سازنده و مخرب کلاس.

int          LoadColors(char *);

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

 

MColor       GetNthCenter(int num) { return center_rgb_colors[num]; }

nامین رنگ مرکزی را باز می‌گرداند.

MColor       GetNthQColor(int num) { return q_rgb_colors[num]; }

nامین رنگ ادراکی را باز می‌گرداند.

MColor       GetNearestAsColor(float ,float ,float );

نزدیک‌ترین مرکز به یک رنگ Labرا باز می‌گرداند. سه پارامتر ورودی به ترتیب مقدار L، aو bرا تعیین می‌کنند.

int          GetNearestAsInt(float ,float ,float );

مانند تابع قبل است، با این تفاوت که نزدیک‌ترین مرکز به صورت یک عدد صحیح بر می‌گرداند.

class   Image_Region{

   public:

                 Image_Region();

      int        GetLeft()       {return left;     }

      int        GetTop()        {return top;      }

      int        GetRight()      {return right;    }

      int        GetBottom()     {return bottom;   }

      int        GetX()          {return x;        }

      int        GetY()          {return y;        }

      int        GetPixelNum()   {return pixel_num;}

      float      GetLikelihood() {return likelihood;}

      void       SetLikelihood(float l) {likelihood = l;}

      void       SetRect(int ,int ,int ,int );

      void       SetPoint(int ,int );

};

کلاسی است که برای تعریف یک ناحیه روی تصویر استفاده می‌شود.

 - کتابخانه Main_Functions.h

void  GetColorHistogram(QuantizedImage &input,float *hist,int num,int bg_color);

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

void   GetRegionColorHistogram(QuantizedImage &input,Image_Region &ir,float *hist,int num);

مشابه تابع قبل عمل می‌کند با این تفاوت که هیستوگرام را برای یک ناحیه مشخص استخراج می‌کند.

 

void   NormalizeHistogram(float *hist,int num);

یک هیستوگرام رنگ دریافت می‌کند و ان را نرمال می‌کند. برای نرمال سازی مجموع عناصر هیستوگرام محاسبه شده و سپس هر عنصر بر مجموع تقسیم می‌شود تا مجموع عناصر پس از نرمال‌سازی 1 شود.

float  Histogram_b(float *model_hist,float *reg_hist,int num);

float  Histogram_cc(float *model_hist,float *reg_hist,int num);

پارامترهای bو ccرا برای مقایسه دو هیستوگرام رنگ محاسبه می‌کند. این توابع در بخش تشخیص شی کاربرد دارند.

 

float  HistogramSimilarity(float *model_hist,float *reg_hist,int num,float k2);

معیار شباهت بین دو هیستوگرام رنگ را بر می‌گرداند.

void  ColorChecking(QuantizedImage &input_image,QuantizedImage &flag_image,

                    float min_clr_percentage,float min_clr_match,

                    int search_win_w,int search_win_h,int apply_win_w,

                    int apply_win_h,int M_clr_hist_size,float *M_clr_hist);

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

void   LayoutChecking(QuantizedImage &input,CCH &m_cch,

                      ContinuousGrayImage &output,int max_dis,int iter)

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

Compatability by:
آخرین به روز رسانی سایت: سه شنبه, 22 اسفند 1391 - 00:26