سؤال

أنا أتجول عبر الويب ولا يوجد أي من البرامج التعليمية التي قرأتها لا أفهمها حقًا. كيف يمكنني تنفيذ مرشح pass3 عالي pass3 لصور .pgm؟ أنا بنية الصورة:

struct Image {

 char* file_name; //name of .pgm file
 char header[3];  
 int max_grey_value; 
 int height;   
 int width;   
 int **pixels;  //pixels matrix
 struct Image *next; //next element in the list

};

والآن كيف تبدأ؟ بقدر ما أعلم أنني يجب أن أحسب بعض المبلغ ، لكنني لا أعرف تمامًا كيف ، وهل هذا المبلغ للصورة بأكملها أم أنها مخصصة للبكسل؟ حسنا ثم ماذا؟ أحتاج إلى تقسيمه على بعض الحاصل. هل هذه الحجة من الوظيفة أو يجب أن تحسبها بنفسها. أنا في حيرة من أمري بشأن هذا. هل يمكن لأحد أن يشرح تنفيذ هذا المرشح لي بعبارات بسيطة يمكن للمبتدئ فهمها؟

هل كانت مفيدة؟

المحلول

أولاً ، تحتاج إلى قراءة صورة PGM الخاصة بك في بنيتك. إذا كنت لا تعرف كيفية القيام بذلك ، اقرأ عن تنسيق PGM.

بمجرد الانتهاء من ذلك ، تحتاج إلى بناء مرشحك. من سؤالك الغامض قليلاً ، يبدو أنك بحاجة إلى مرشح من الحجم 3x3. من الناحية النظرية ، يمكنك إعادة استخدام Image بنية لتمثيل المرشح - محتويات المرشح ( pixels يعتمد جزء) على المرشح المحدد الذي تستخدمه (على سبيل المثال Laplacian أو Sobel). بعد أن تحصل على مرشحك ، الرصيف مع الصورة التي قمت بتحميلها في الخطوة الأولى. من الناحية الفنية ، لقد انتهيت هنا ، لكن على افتراض أنك تريد بالفعل رؤية النتيجة ، ستحتاج إلى ذلك اكتب النتيجة الناتجة عن ملف PGM آخر.

ستحتاج إلى كتابة وظيفة الالتفاف الخاصة بك (سيتضمن هذا الجزء "عدد بعض المبلغ" الذي ذكرته في سؤالك). ستحتاج أيضًا إلى وظائف I/O صورتك الخاصة ، إلا إذا تم تقديمها بالفعل.

سيبدو ناتج الالتواء شيء مثل هذه.

كملاحظة جانبية ، سيكون من الأفضل فصل تمثيل الصورة في الذاكرة وتمثيل الصورة في نظام الملفات في التصميم الخاص بك. على سبيل المثال ، حاليا ، الخاص بك Image يفترض البنية أن كل صورة لها مقابلة filename, ، والتي ستكون بلا معنى إذا كان Image لم يتم تحميله من نظام الملفات (على سبيل المثال إذا كان مرشحًا قمت بإنشائه بمفردك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top