2023. 7. 13. 11:26ㆍ카테고리 없음
from . 양정은 강사님 프로젝트 과제임.
소벨 필터링 ? 이미지 처리나 컴퓨터 비전에서 사용되는 엣지 감지 알고리즘.
일반적으로 가장자리에 해당하는 이미지의 높은 공간 주파수 영역을 강조하는 방법을 제공한다.
white_patch = 255*np.ones(shape=(10, 10)) # 10,10 짜리 흰색패치
black_patch = 0*np.ones(shape=(10, 10)) # 10,10 짜리 검정패치
print(white_patch)
img1 = np.hstack([white_patch, black_patch])
img2 = np.hstack([black_patch, white_patch])
img = np.vstack([img1, img2])
fig, ax = plt.subplots(figsize=(8, 8))
# ax.imshow(img, cmap='gray') # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
ax.imshow(img) # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
cmap을 적용 안한 것과 한 것. 이렇게 되어 버린다. 신기. 3번째 사진은 3개를 붙여봤다.
data = np.arange(5)
print(data)
print("repaet:", np.repeat(data, repeats=3))
print("tile:", np.tile(data, reps=3))
np.repeat은 그 숫자 자체를 몇 번 반복하고(파라미터는 repeats을 써야함.)
np.tile은 전체를 한바퀴 도는 것을 반복한다. (파라미터는 reps를 써야함.)
data = np.arange(6).reshape(2, 3)
print(data)
# axis=0 방향으로 반복.
print("repeat (axis=0): \n", np.repeat(data, repeats=3, axis=0))
#axis=1 방향으로 반복.
print("repeat (axis=1): \n", np.repeat(data, repeats=3, axis=1))
print("repeat (axis=0 and axis=1) : \n", np.repeat(np.repeat(data, repeats=2, axis=1), repeats=3, axis=1))
repeat 연습. 진심 뭐라노! 이거 이해가 잘안된다.
data = np.arange(6).reshape(2, 3)
print(data)
print("tile(axis=0):\n", np.tile(data, reps=[3, 1]))
print("tile(axis=1):\n", np.tile(data, reps=[1, 3]))
print("tile(axis=0 and exis=1):\n", np.tile(data, reps=[3, 3]))
tile 연습. 이거는 살짝 괜찮다 그래도.
white_patch = 255*np.ones(shape=(10, 10)) # 10,10 짜리 흰색패치
black_patch = 0*np.ones(shape=(10, 10)) # 10,10 짜리 검정패치
print(white_patch)
img1 = np.hstack([white_patch, black_patch])
img2 = np.hstack([black_patch, white_patch])
img = np.vstack([img1, img2])
img = np.tile(img, (4,4))
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(img, cmap='gray') # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
# ax.imshow(img) # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
tile을 이용한 체스판 만들기1.
white_black_array = np.array([[255, 0], [0, 255]])
print(white_black_array)
chess_board = np.tile(white_black_array, (4, 4))
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(chess_board, cmap='gray')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
tile을 이용한 체스판 만들기2.
white_patch = 255*np.ones(shape=(10, 10)) # 10,10 짜리 흰색패치
black_patch = 0*np.ones(shape=(10, 10)) # 10,10 짜리 검정패치
gray_patch = 125*np.ones(shape=(10, 10)) # 10,10 짜리 회색패치
print(white_patch)
img1 = np.hstack([white_patch, gray_patch])
img2 = np.hstack([gray_patch, black_patch])
img = np.vstack([img1, img2])
img = np.tile(img, (4,4))
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(img, cmap='gray') # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
# ax.imshow(img) # 흑백 이미지를 만들 것이여서 colormap은 'gray'로
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
회색을 이용해서 체스판 만들기.
img = np.arange(0, 151, 50).reshape(1, -1)
print(img)
img = img.repeat(100, axis=0).repeat(30, axis=1)
fig, ax = plt.subplots(figsize=(8,4))
ax.imshow(img, cmap='gray', vmax=255, vmin=0)
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
다음은 힌색부터 뒤집어져 나오는 것.
import numpy as np
import matplotlib.pyplot as plt
img = np.arange(256, 0, -50).reshape(-1, 1)
print(img)
img = img.repeat(30, axis=1).repeat(10, axis=0)
fig, ax = plt.subplots(figsize=(8, 4))
ax.imshow(img, cmap='gray')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
2차원에서 axis=0을 한다면, 각 인덱스에 해당하는 리스트를 repeats만큼 반복한다.
img = np.arange(0, 256, 50)[::-1]
print(img)
img = np.arange(0, 256, 50)[::-1].reshape(-1,1)
print(img)
img1 = np.arange(0, 151, 1).reshape(1, -1)
# print(img1)
img1 = img1.repeat(100, axis=0).repeat(2, axis=1)
print(img1)
img2 = np.arange(151, 0, -1).reshape(1, -1)
img2 = img2.repeat(100, axis=0).repeat(2, axis=1)
img = np.vstack([img1, img2])
fig, ax = plt.subplots(figsize=(8,4))
ax.imshow(img, cmap='gray')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.show()
다음은 그라데이션. 이건 위에거에 비해 별로 안어려웠다.
Dimensional Window Extraction.
윈도우의 갯수 = 전체 데이터 길이 - 윈도우의 길이 +1
공식. L' = L - W +1 혹은 L-(W-1)
2-Dimensional Window Extraction
W' =
H' =
각각 계산 한다음 W' * H'를 한다.
arrays = []
for i in range(5):
first_one = 10 * (i + 1)
last_one = 70 + first_one
data_list = np.arange(first_one, last_one, 10)
arrays.append(data_list)
data1, data2, data3, data4, data5 = arrays
data_stack = np.vstack(arrays)
data_stack_shape = data_stack.shape
W = 3
# L_ = L - W + 1
windows = []
for i in range(data_stack_shape[0] - W + 1):
for j in range(data_stack_shape[1] - W + 1):
window = data_stack[i:i+W, j:j+W]
print(i+1,'-',j+1,'번째 윈도우')
print(window)
이런 식으로 나온다.
data1 = 10* np.arange(1, 8).reshape(1, -1)
data2 = 10* np.arange(5).reshape(-1, 1)
data = data1 + data2
print(data)
브로드캐스팅을 통한 계산 방법.
import numpy as np
arrays = []
for i in range(5):
first_one = 10 * (i + 1)
last_one = 70 + first_one
data_list = np.arange(first_one, last_one, 10)
arrays.append(data_list)
data_stack = np.vstack(arrays)
window_size = (3, 3)
windows = np.lib.stride_tricks.sliding_window_view(data_stack, window_size)
# Print all the windows
for i in range(windows.shape[0]):
for j in range(windows.shape[1]):
print(f'Window at position ({i+1}, {j+1}):')
print(windows[i, j])
print()
gpt 물어보니까 np.lib.stride_tricks.sliding_window_view 이런게 있다고 한다.
Correlation - windows를 뽑으면서 내가 원하는 패턴이 있는 부분을 추출하는 연산.
내적 : 원소별 곱의 합.
Correlation 연습.1
data = np.random.randint(-1, 2, (10, ))
print('data: ',data)
filter_ = np.array([-1, 1, -1])
print('filter: ',filter_)
L = len(data)
F = len(filter_)
print('F_Length: ', F)
L_ = L - F + 1
filtered = []
for idx in range(L_):
window = data[idx : idx + F]
print('window for', idx,':', window )
filtered.append(np.dot(window, filter_))
filtered = np.array(filtered)
print('filtered: ',filtered)
연습2.
np.array([[1, 2, 5], [-10, 2, -2], [5, 1, -4]])를 필터로 계산하기.
data1 = 10* np.arange(1, 8).reshape(1, -1)
data2 = 10* np.arange(5).reshape(-1, 1)
data = data1 + data2
print("Data:\n", data)
print(data.shape)
filter_ = np.array([[1,2,5],[-10,2,-2],[5,1,-4]])
print("Filter:\n", filter_)
F = filter_.shape[0]
print('F_length : ', F)
L = data.shape[0]
L_ = L - F + 1
print('L_: ',L_)
W_ = data.shape[1] - F + 1
print('W_: ',W_)
filtered = []
for i in range(L_):
for j in range(W_):
window = data[i : i + F, j : j + F]
print(f'Window for ({i}, {j}):\n', window)
filtered.append(np.sum(window * filter_))
print(i, j, '번째 filtered', '\n', filtered)
filtered = np.array(filtered).reshape((L_, W_))
print('Filtered:\n', filtered)