661. 圖像平滑器(Python)

題目

難度:★★☆☆☆
類型:幾何,二維數(shù)組

包含整數(shù)的二維矩陣 M 表示一個圖片的灰度。你需要設(shè)計一個平滑器來讓每一個單元的灰度成為平均灰度 (向下舍入) ,平均灰度的計算是周圍的8個單元和它本身的值求平均,如果周圍的單元格不足八個,則盡可能多的利用它們。

注意
給定矩陣中的整數(shù)范圍為 [0, 255]。
矩陣的長和寬的范圍均為 [1, 150]。

示例

輸入:
[[1,1,1],
[1,0,1],
[1,1,1]]
輸出:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
解釋:
對于點 (0,0), (0,2), (2,0), (2,2): 平均(3/4) = 平均(0.75) = 0
對于點 (0,1), (1,0), (1,2), (2,1): 平均(5/6) = 平均(0.83333333) = 0
對于點 (1,1): 平均(8/9) = 平均(0.88888889) = 0

解答

本題難點在于如何尋找每個點的平滑域,即某一點P(h, w)周圍的9個點,此外,還要考慮P在圖片邊上或角上的情況,分別對應(yīng)6個點和4個點,因此需要增加對索引進(jìn)行判斷的過程。

class Solution:
    def imageSmoother(self, M):
        height, width = len(M), len(M[0])                               # 獲得圖像的高和寬
        res = [[None for _ in range(width)] for _ in range(height)]     # 創(chuàng)建和輸入圖像大小一致的空圖片

        for h in range(height):                                         # 按行遍歷
            for w in range(width):                                      # 按列遍歷
                # 當(dāng)前點為(h, w),對其周圍3*3方格內(nèi)的點取平均,作為平滑后的該點值
                region_pixels = [pixel for row in M[max(0, h-1):h + 2] for pixel in row[max(0, w-1):w + 2]] # 9(4或6)個點組成的列表
                res[h][w] = sum(region_pixels) // len(region_pixels)    # 求平均并填充到結(jié)果圖片中
        return res                                                      # 返回平滑后的圖像

如有疑問或建議,歡迎評論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容