Ali Ismael نشر 12 أكتوبر 2021 أرسل تقرير نشر 12 أكتوبر 2021 كيف يمكنني زيادة حدة الصورة sharpening في OpenCV؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 12 أكتوبر 2021 أرسل تقرير نشر 12 أكتوبر 2021 (معدل) كما تعلم فإن مرشحات الحدَ هدفها الأساسي هو العمل المعاكس لمرشحات التنعيم، حيث أن مرشحات التنعيم تقوم بعمل تشويش للصورة وأهم تطبيقاتها هي إزالة الضجيج أو تنعيم الصورة، أما مرشحات الحدَ، فهي بالعكس، حيث أنها تقوم بتوضيح الحواف. كما أنه كنصيحة مني فإنه في حالة كانت الصورة الخاصة بك تحوي بعض الضجيج فلابد من أن تقوم أولاً بتطبيق مرشح تنعيم على الصورة لإزالة الضجيج منها، فالضجيج هو حافة في نهاية الأمر وبالتالي تطبيق مرشح تعزيز (حدَ) سيؤدي إلى تعزيز الضجيج وهذا أمر غير مرغوب فيه. هناك تقنيات عدة تقنيات لزيادة حدة الصورة وتعتمد كلها على تقنيات الحد sharpening Spatial Filters، وتعتمد على نوعين من المشتقات، مشتقات الدرجة الأولى مثل مرشح سوبل أو الثانية مثل مرشح لابلاسيان، ثم نستخدم المعادلة التالية -مثلاً في حالة استخدام لابلاسيان تكون: g(x,y)=f(x,y)+c[∇2f(x,y)] g(x,y): الصورة المعززة f(x,y): الصورة الأصلية ∇2f(x,y): الصورة بعد تطبيق مرشح الحد(لابلاسيان) حيث أن قيمة المعامل c هي إما 1 أو -1 وتعتمد على الكيرنل التي استخدمتها في تطبيق لابلاسيان وتساوي إما 1 أو -1 بحيث: laplacian1=np.array( [[0,1,0], [1,-4,1], [0,1,0]]) # تكون قيمة c=1- laplacian2=np.array( [[1,1,1], [1,-8,1], [1,1,1]]) # c=1- laplacian3=np.array([[0,-1,0], [-1,4,-1], [0,-1,0]]) # c=+1 laplacian4=np.array([[-1,-1,-1], [-1,+8,-1], [-1,-1,-1]]) # c=+1 في المثال التالي سنقوم بتطبيق الفكرة السابقة وهي أفضل طريقة لزيادة حدة الصورة بالاعتماد على مشتقات الدرجة الثانية (لابلاسيان) والمعادلة السابقة: import cv2 as cv import matplotlib.pyplot as plt # قراءة الصورة image = cv2.imread('/content/closedeye1.jpg',1) # matplotlib هنا فقط سأقوم بتحويل فضاء الألوان لأنني سأقوم بعرض الصورة باستخدام image=cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image) # سنجرب فلاتر لابلاسيان المختلفة laplacian1=np.array([[0,1,0],[1,-4,1],[0,1,0]]) # c=-1 laplacian2=np.array([[1,1,1],[1,-8,1],[1,1,1]]) # c=-1 laplacian3=np.array([[0,-1,0],[-1,4,-1],[0,-1,0]]) # c=1 laplacian4=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) # c=1 # تطبيق الفلاتر لنرى نتيجة كل واحد على الصورة image_laplacian1=cv.filter2D(src=image, kernel=laplacian1, ddepth=-1) image_laplacian2=cv.filter2D(src=image, kernel=laplacian2, ddepth=-1) image_laplacian3=cv.filter2D(src=image, kernel=laplacian3, ddepth=-1) image_laplacian4=cv.filter2D(src=image, kernel=laplacian4, ddepth=-1) # تعزيز الصور image_sharping_1=cv2.subtract(image,image_laplacian1) image_sharping_2=cv2.subtract(image,image_laplacian2) image_sharping_3=cv2.add(image,image_laplacian3) image_sharping_4=cv2.add(image,image_laplacian4) # عرض النتائج import matplotlib.pyplot as plt plt.figure(figsize=(15,30)) plt.subplot(521) plt.imshow(image) plt.title("original image") plt.subplot(522) plt.imshow(image_sharping_1) plt.title("sharpenend_image 1") plt.subplot(523) plt.imshow(image_sharping_2) plt.title("sharpenend_image 2") plt.subplot(524) plt.imshow(image_sharping_3) plt.title("sharpenend_image 3") plt.subplot(525) plt.imshow(image_sharping_4) plt.title("sharpenend_image 4") الخرج: تم التعديل في 12 أكتوبر 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
0 Ahmed Sharshar نشر 16 أكتوبر 2021 أرسل تقرير نشر 16 أكتوبر 2021 (معدل) لاحظ أن فكرة زيادة حدة الصورة تعمل عمل التفاضل، وهي عن طريق زيادة وابراز الفروقات بين حواف الصورة والتي تكون فيها شدة كل بيكسل مختلفة اختلافاً واضحاً عما بجانبها، لذا فانه كلما زاد هذا الفرق، كلما وضح أكثر وزادت حدة الصورة. لذلك فإنه ولفعل هذا، يجب أن نقوم بتمرير مصفوفة تحدث هذا الفرق، لذا قد نستخدم مثل هذة المصفوفة: بحيث تمر المصفوفة على كل بيكسل ونقوم بضربها فيها، لاحظ أن القيمة التي في المنتصف كبيرة بشدة عما حولها، كذلك فانه الصف الأول يشابه الصف الأخير ونفس الموضوع بالنسبة للعمود وهذا حتى نحدث فرقاً واضحاً حول قيمة البيكسل التي في المنتصف لزيادة حدة الصورة. المثال التالي يوضح كيفية تأثر الصورة بها. هنا نبدأ بعرض الصورة الأصلية: import cv2 import numpy as np image = cv2.imread('C:/Users/ahmed/Pictures/images.jpg', flags=cv2.IMREAD_COLOR) cv2.imshow('AV CV- Winter Wonder', image) cv2.waitKey() cv2.destroyAllWindows() بعد ذلك نضيف المصفوفة ونقوم بعملية زيادة الحدة: kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]]) image_sharp = cv2.filter2D(src=image, ddepth=-1, kernel=kernel) cv2.imshow('AV CV- Winter Wonder Sharpened', image_sharp) cv2.waitKey() cv2.destroyAllWindows() وتكون النتيجة واضحة هكذا: يمكنك استخدام أي مصفوفة تريدها كمشتقات لابلاس أو غيرها بحيث توصلك الى درجة الحدة التي تريد. تم التعديل في 16 أكتوبر 2021 بواسطة Ahmed Sharshar اقتباس
السؤال
Ali Ismael
كيف يمكنني زيادة حدة الصورة sharpening في OpenCV؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.