สมมติว่าเรามีเมทริกซ์ 2 มิติ M ที่แสดงระดับสีเทาของรูปภาพ เราต้องออกแบบให้เรียบขึ้นเพื่อให้ระดับสีเทาของแต่ละพิกเซลกลายเป็นระดับสีเทาเฉลี่ย (ปัดเศษลง) ของพิกเซลโดยรอบทั้ง 8 พิกเซลและตัวมันเอง หากเซลล์มีเซลล์รอบๆ น้อยกว่า 8 เซลล์ ให้แปลงพิกเซลที่เป็นไปได้ทั้งหมด
ดังนั้นหากอินพุตเป็นแบบ
1 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
แล้วผลลัพธ์ที่ได้จะเป็น
0 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
R :=จำนวนแถวของ M
-
C :=จำนวนคอลัมน์ของ
-
กำหนดอาร์เรย์ d ={ -1, 0, 1 }
-
กำหนดขนาดอาร์เรย์ 2D หนึ่งรายการ (R x C)
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
ผลรวม :=0, นับ :=0
-
สำหรับการเริ่มต้น k :=0 เมื่อ k <3 อัปเดต (เพิ่ม k ขึ้น 1) ทำ -
-
สำหรับการเริ่มต้น l :=0 เมื่อ l − 3 อัปเดต (เพิ่ม l ขึ้น 1) ทำ −
-
m :=i + d[k], n :=j + d[l]
-
ถ้า m>=0 และ m
=0 และ n -
เพิ่มจำนวนขึ้น 1 และ sum =ผลรวม + M[m, n]
-
-
-
-
res[i, j] :=sum / count
-
-
-
ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;void print_vector(vector > v){ cout <<"["; for(int i =0; i > imageSmoother(vector >&M) { int R =M.size(); int C =M[0].size(); เวกเตอร์ d{ -1, 0, 1 }; vector > res(R, vector (C, 0)); สำหรับ (int i =0; i =0 &&m =0 &&n > v ={{1,1,1},{1,0,1},{1,1,1}}; print_vector(ob.imageSmoother(v));}
อินพุต
<ก่อน>{{1,1,1},{1,0,1},{1,1,1}}ผลลัพธ์
[[0, 0, 0, ],[0, 0, 0, ],[0, 0, 0, ],]