第10回 課題解答

元画像の例

課題1 : ノイズ追加

import cv2
import numpy as np
 
# 画像の読み込み
image = cv2.imread('source.bmp')
 
# 100個のノイズを追加する
for i in range(100):
  # ランダムな位置にノイズを追加
  x = np.random.randint(0, image.shape[1])
  y = np.random.randint(0, image.shape[0])
  # 指定した位置の明度を反転させる
  image[y, x] = 255 - image[y, x]
 
# 画像の保存
cv2.imwrite('1.bmp', image)
1

課題2 : 膨張・収縮

import cv2
import numpy as np
 
# 膨張処理した画像を返す
def dilate_image(image):
  kernel = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]], np.uint8)
  dilated_image = cv2.dilate(image, kernel, iterations=1)
  return dilated_image
 
# 収縮処理した画像を返す
def erode_image(image):
  # 画像を白黒反転させる
  image = cv2.bitwise_not(image)
  # 膨張処理
  image = dilate_image(image)
  # 画像を白黒反転させる
  image = cv2.bitwise_not(image)
  return image
 
# 画像の読み込み
image = cv2.imread('1.bmp')
 
# 画像の膨張処理
image1 = dilate_image(image)
 
# 画像の収縮処理
image2 = erode_image(image)
 
# 画像の保存
cv2.imwrite('2_1.bmp', image1)
cv2.imwrite('2_2.bmp', image2)
2_1


2_2

課題3 : オープニング・クロージング

import cv2
import numpy as np
 
# 膨張処理した画像を返す
def dilate_image(image):
  kernel = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]], np.uint8)
  dilated_image = cv2.dilate(image, kernel, iterations=1)
  return dilated_image
 
# 収縮処理した画像を返す
def erode_image(image):
  # 画像を白黒反転させる
  image = cv2.bitwise_not(image)
  # 膨張処理
  image = dilate_image(image)
  # 画像を白黒反転させる
  image = cv2.bitwise_not(image)
  return image
 
# 画像の読み込み
image = cv2.imread('1.bmp')
 
# オープニング (収縮→膨張)
image1 = erode_image(image)
image1 = dilate_image(image1)
 
# クロージング (膨張→収縮)
image2 = dilate_image(image)
image2 = erode_image(image2)
 
# 画像の保存
cv2.imwrite('3_1.bmp', image1)
cv2.imwrite('3_2.bmp', image2)
3_1


3_2

課題4 : トップハット・ブラックハット

import cv2
import numpy as np
 
image = cv2.imread('1.bmp') # ノイズ画像
image_opened = cv2.imread('3_1.bmp') # オープニング画像
image_closed = cv2.imread('3_2.bmp') # クロージング画像
 
# トップハット (ノイズ画像 - オープニング画像)の絶対値
image_tophat = cv2.absdiff(image, image_opened)
 
# ブラックハット (クロージング画像 - ノイズ画像)の絶対値
image_blackhat = cv2.absdiff(image_closed, image)
 
# 画像を保存する
cv2.imwrite('4_1.bmp', image_tophat)
cv2.imwrite('4_2.bmp', image_blackhat)


-------------------------------
import cv2
import numpy as np
 
image = cv2.imread('1.bmp') # ノイズ画像
image_opened = cv2.imread('3_1.bmp') # オープニング画像
image_closed = cv2.imread('3_2.bmp') # クロージング画像
 
# トップハット (ノイズ画像 - オープニング画像)の絶対値
image_tophat = cv2.absdiff(image, image_opened)
 
# ブラックハット (クロージング画像 - ノイズ画像)の絶対値
image_blackhat = cv2.absdiff(image_closed, image)
 
# 画像を保存する
cv2.imwrite('4_1.bmp', image_tophat)
cv2.imwrite('4_2.bmp', image_blackhat)
4_1


4_2