0
3

More than 3 years have passed since last update.

ライブラリNumpyを用いた正規分布に基づくゴマ塩ノイズ付加処理と除去処理

Last updated at Posted at 2020-12-17

初めに(^ω^)

モザイクっていやですよね。ノイズっていやですよね…
ほんとは音響信号周りでやる予定だったものなんですが、画像のほうがウケがいいかなと思ってやってみました。思ったよりもクオリティ高い?!

作成したソースコード

#---------------------------------------------------------
#ライブラリNumpyを用いた正規分布に基づくゴマ塩ノイズ付加処理と除去処理
#---------------------------------------------------------
import numpy as np
import cv2

#保存先指定
file = './text11.txt'

#カラーで読み込み
img = cv2.imread('./shigure.png')

#Numy配列に保存
im = np.array(img)

#画像サイズ取得
shape = im.shape

#1ピクセル事にノイズ付加処理
for x in range(shape[0]):
    for y in range(shape[1]):
        Count = 0
        rand = np.random.randint(3)#乱数作成
        print (rand)
        if rand == 0:
            for Count in range(3):
                im[x][y][Count] = 0
        if rand == 1:
            for Count in range(3):
               im[x][y][Count] = 255

#ノイズ付加画像出力
cv2.imwrite('./Add noise.png', im)

#ノイズ除去
median1 = cv2.medianBlur(im, ksize = 3)#1回目
median2 = cv2.medianBlur(median1, ksize = 3)#2回目
median3 = cv2.medianBlur(median2, ksize = 3)#3回目
median4 = cv2.medianBlur(median3, ksize = 3)#4回目
median5 = cv2.medianBlur(median4, ksize = 3)#5回目
median6 = cv2.medianBlur(median5, ksize = 3)#6回目
median7 = cv2.medianBlur(median6, ksize = 3)#7回目
median8 = cv2.medianBlur(median7, ksize = 3)#8回目
median9 = cv2.medianBlur(median8, ksize = 3)#9回目
median10 = cv2.medianBlur(median9, ksize = 3)#10回目

#ノイズ除去画像出力
cv2.imwrite('./Noise removal1.png', median1)#1回目のノイズ除去画像出力
cv2.imwrite('./Noise removal10.png', median10)#10回目のノイズ除去画像出力

コード解説

コード実行結果

元画像
shigure.png

ノイズ付加画像
Add noise.png

ノイズ除去1回目
Noise removal1.png

ノイズ除去10回目
Noise removal10.png

コード解説あれこれ

ノイズ付加処理


#1ピクセル事にノイズ付加処理
for x in range(shape[0]):
    for y in range(shape[1]):
        Count = 0
        rand = np.random.randint(3)#乱数作成
        print (rand)
        if rand == 0:
            for Count in range(3):
                im[x][y][Count] = 0
        if rand == 1:
            for Count in range(3):
               im[x][y][Count] = 255

ノイズ付加処理に関しては、1ピクセルごとに乱数を用いてノイズを付加しています。その為には、1ピクセルごとに中身をほげふがしなければなりません。その為に2重forを用いてみました。x軸とy軸の関係性に注意しながら見てみてください!

ノイズ除去処理

#ノイズ除去
median1 = cv2.medianBlur(im, ksize = 3)#1回目
median2 = cv2.medianBlur(median1, ksize = 3)#2回目
median3 = cv2.medianBlur(median2, ksize = 3)#3回目
median4 = cv2.medianBlur(median3, ksize = 3)#4回目
median5 = cv2.medianBlur(median4, ksize = 3)#5回目
median6 = cv2.medianBlur(median5, ksize = 3)#6回目
median7 = cv2.medianBlur(median6, ksize = 3)#7回目
median8 = cv2.medianBlur(median7, ksize = 3)#8回目
median9 = cv2.medianBlur(median8, ksize = 3)#9回目
median10 = cv2.medianBlur(median9, ksize = 3)#10回目

#ノイズ除去画像出力
cv2.imwrite('Noise removal1.png', median1)#1回目のノイズ除去画像出力
cv2.imwrite('Noise removal10.png', median10)#10回目のノイズ除去画像出力

参考文献

たぶんないなぁ

目次のようなもの

Re:ゼロから始める機械学習生活(深層学習もあるよ)
ここに進捗状況等を載せてます。
今まで書いたものを一覧にしていたりするので見てみてください!

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3