๐ ๋ณธ ์์ ๋ Window10์ VSCode, Python3.11.0๋ก ์์ฑ๋์์ต๋๋ค.
์ด๋ฏธ์ง ์ ์ฌ๋๋ ๋ ์ด๋ฏธ์ง ๊ฐ์ ์ ์ฌ์ฑ์ ํ๊ฐํ๋ ๊ฐ๋ ์ผ๋ก, ์ฃผ๋ก ์ปดํจํฐ ๋น์ ๋ฐ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ถ์ผ์์ ์ฌ์ฉ๋๋ค.
์ด๋ฏธ์ง ์ ์ฌ๋์ ์ธก์ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ๊ฐ ๋ฐฉ๋ฒ์ ํน์ ํ ๊ธฐ์ค์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
์ด๋ฏธ์ง ์ ์ฌ๋๋ฅผ ํ๊ฐํ๋ ์ด์ ๋ ๋ค์ํ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ฒ์ ๋ฐ ์ถ์ฒ ์์คํ : ์ด๋ฏธ์ง ๊ฒ์ ์์ง, ์ถ์ฒ์ ์ฌ์ฉ๋์ด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฏธ์ง์ ์ ์ฌํ ์ด๋ฏธ์ง๋ฅผ ์ฐพ๋๋ฐ ๋์์ ์ค๋ค.
- ์ค๋ณต ์ด๋ฏธ์ง ํ์ง : ์น ์ฌ์ดํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๋ณต๋ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์๋ด๊ธฐ ์ํด ์ ์ฌ๋ ์ธก์ ์ด ํ์ํ๋ค.
- ์ด๋ฏธ์ง ํ์ง ํ๊ฐ : ์ด๋ฏธ์ง์ ํ์ง์ ํ๊ฐํ๊ฑฐ๋, ์์ถ ํ์ ์ด๋ฏธ์ง๊ฐ ์๋ณธ๊ณผ ์ผ๋ง๋ ์ ์ฌํ์ง๋ฅผ ํ๋จํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๊ฐ์ฒด ์ธ์ ๋ฐ ๋ถ๋ฅ : ์ด๋ฏธ์ง ๋ด์ ๊ฐ์ฒด๋ฅผ ์ธ์ํ๊ณ ๋ถ๋ฅํ๋ ๊ณผ์ ์์๋ ์ ์ฌ๋ ์ธก์ ์ด ์ค์ํ ์ญํ ์ ํ๋ค.
ํฝ์ ๊ธฐ๋ฐ ์ ์ฌ๋ ์ธก์ - MSE(Mean Squared Error)
๋ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์ ๊ฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ๊ณฑํ์ฌ ํ๊ท ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ ์ด๋ฏธ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ๋์ ์ผ๋ก ํ๊ฐํ ๋ ์ฌ์ฉ๋๋ค.
๊ฐ์ 0 ์ด์์ด๋ฉฐ, 0์ ๊ฐ๊น์ธ์๋ก ๋ ์ด๋ฏธ์ง๊ฐ ์ ์ฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
MSE๋ ์ด๋ฏธ์ง์ ๊ตฌ์กฐ์ ์ ๋ณด๋ ์ธ๊ฐ์ ์๊ฐ์ ์ธ์์ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ ์ด๋ฏธ์ง๊ฐ ์๊ฐ์ ์ผ๋ก ์ ์ฌํ๋๋ผ๋ MSE๊ฐ์ด ๋๊ฒ ๋์ฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง์ ๋ฐ๊ธฐ๋ ๋๋น๊ฐ ๋ค๋ฅผ ๊ฒฝ์ MSE๋ ํฐ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
import cv2
import numpy as np
from numba import jit
@jit
def mse(imageA:np.ndarray, imageB:np.ndarray):
# ๋ ์ด๋ฏธ์ง์ ์ฐจ์ด๋ฅผ ๊ณ์ฐ
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
return err
if __name__ == "__main__":
im1 = cv2.imread("cat1.jpg")
im2 = cv2.imread("cat1.jpg")
ratio = mse(im1,im2)
print(f"์ ์ฌ๋ : {ratio}")
๊ฐ์ ์ด๋ฏธ์ง ์ผ๋๋ 0์ด๋ค.
ํ์ง๋ง ๋ค๋ฅธ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ 0๋ณด๋ค ํฐ ๊ฐ์ด ๋์จ๋ค.
MSE ๋ฐฉ๋ฒ์ ์์ ๋งํ๋ฏ ์ฌ๋์ ์๊ฐ์ ์ธ์์ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๊ณ ์์ด๋ฅผ ๊ตฌ๋ถํ์ง ๋ชปํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๊ณ ์์ด ์ด๋ฏธ์ง๋๋ผ๋ ์์ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๋จ๋ ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ํ๋ค๋ค.
ํฝ์ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ - PSNR(Peak Signal-to-Noise Ratio)
MSE๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ ํธ ๋ ์ก์ ๋น์จ์ ๊ณ์ฐํ๋ค.
์ฃผ๋ก ์์ถ๋ ์ด๋ฏธ์ง์ ์๋ณธ ์ด๋ฏธ์ง ๊ฐ์ ํ์ง์ ๋น๊ตํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๊ฐ์ด ๋์์๋ก ๋ ์ด๋ฏธ์ง ๊ฐ์ ์ ์ฌ์ฑ์ด ๋๊ณ ํ์ง์ด ์ข๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
import cv2
import numpy as np
from numba import jit
from copy import copy
def mse(imageA, imageB):
# ๋ ์ด๋ฏธ์ง์ ์ฐจ์ด๋ฅผ ๊ณ์ฐ
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
return err
def psnr(imageA, imageB):
# MSE ๊ณ์ฐ
error = mse(imageA, imageB)
if error == 0:
return float('inf') # ๋ ์ด๋ฏธ์ง๊ฐ ๋์ผํ ๊ฒฝ์ฐ PSNR์ ๋ฌดํ๋
MAX_PIXEL_VALUE = 255.0 # 8๋นํธ ์ด๋ฏธ์ง์ ์ต๋ ํฝ์
๊ฐ
return 10 * np.log10((MAX_PIXEL_VALUE ** 2) / error)
if __name__ == "__main__":
im = cv2.imread("cat1.jpg")
zim = copy(im) # ์ ํ์ง ์ด๋ฏธ์ง
zim = cv2.blur(zim,(5,5))
psnr_ori = psnr(im,zim)
print(f"k(5,5) ์ ์ฌ๋: {psnr_ori} dB")
zim = cv2.blur(zim,(9,9))
psnr_val = psnr(im,zim)
print(f"k(9,9) ์ ์ฌ๋ : {psnr_val} dB")
cv2.imshow("img",im)
cv2.imshow("low img",zim)
cv2.waitKey(0)
cv2.destroyAllWindows()
์ด๋ฏธ์ง ํ์ง์ด ๋ ๋จ์ด์ง ์๋ก ๋ ๊ฐ์ด ๋ฎ์์ง๋ค.
๊ตฌ์กฐ ๊ธฐ๋ฐ ๋ฐฉ๋ฒ - SSIM(Structural Similarity Index)
SSIM์ ๋ ์ด๋ฏธ์ง ๊ฐ์ ๊ตฌ์กฐ์ ์ ์ฌ์ฑ์ ์ธก์ ํ๋ ์งํ๋ก, ์ด๋ฏธ์ง ํ์ง ํ๊ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
๋ฐ๊ธฐ, ๋๋น, ๊ตฌ์กฐ์ ์ธ ๊ฐ์ง ์์๋ฅผ ๊ณ ๋ คํ์ฌ ๋ ์ด๋ฏธ์ง์ ์ ์ฌ์ฑ์ ํ๊ฐํ๋ค.
๊ฐ์ 0~1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๊ณ 1์ ๊ฐ๊น์ธ์๋ก ๋ ์ด๋ฏธ์ง๊ฐ ์ ์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
import cv2
from skimage.metrics import structural_similarity as ssim
# ์ด๋ฏธ์ง ์ฝ๊ธฐ
imageA = cv2.imread('cat1.jpg')
cv2.imshow("im1",imageA)
imageB = cv2.imread('cat2.jpg')
cv2.imshow("im2",imageB)
# ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํ (SSIM ๊ณ์ฐ์ ์ํด)
imageA_gray = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
imageB_gray = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
# SSIM ๊ณ์ฐ
ssim_index, _ = ssim(imageA_gray, imageB_gray, full=True)
print(f'SSIM: {ssim_index}')
cv2.waitKey(0)
cv2.destroyAllWindows()
์ด๋ฏธ์ง์ ๊ตฌ์กฐ, ๋ฐ๊ธฐ, ๋๋น ๋ฑ์ ํตํด ์ ์ฌ๋๋ฅผ ํ๊ฐํ๋ฏ๋ก ๋ค๋ฅธ ์ด๋ฏธ์ง์ธ์ง๋ ํ๊ฐ ๊ฐ๋ฅํ๋ ๊ณ ์์ด, ๊ฐ์์ง, ํ ๋ผ ์ด๋ ๊ฒ ๊ตฌ๋ถ์ ํ ์ ์๋ค.
ํน์ง ๊ธฐ๋ฐ ๋ฐฉ๋ฒ - SIFT(Scale-Invariant Feature Transform)
์ด๋ฏธ์ง์ ํน์ง์ ์ ์ถ์ถํ๊ณ ์ด๋ฏธ์ง ๊ฐ์ ๋งค์นญ์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ค์ํ ์ค์ผ์ผ๊ณผ ํ์ , ์กฐ๋ช ๋ณํ์ ๊ฐ์ธํ ํน์ง์ ์ ๊ณตํ์ฌ ์ปดํจํฐ ๋น์ ๋ถ์ผ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
์ฃผ์ ๋จ๊ณ
- ์ค์ผ์ผ ๊ณต๊ฐ ๊ทน๋ํ
- ํน์ง์ ๋ก์ปฌ๋ผ์ด์ ์ด์
- ์ฃผ ๋ฐฉํฅ ํ ๋น
- ํน์ง ๋ฒกํฐ ์์ฑ
- ํน์ง์ ๋งค์นญ
์ฅ์
- ์ค์ผ์ผ ๋ถ๋ณ
- ํ์ ๋ถ๋ณ
- ์กฐ๋ช ๋ณํ์ ๊ฐ์ธ
๋จ์
- ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
import cv2
# ์ด๋ฏธ์ง ์ฝ๊ธฐ
image1 = cv2.imread('cat1.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('cat2.jpg', cv2.IMREAD_GRAYSCALE)
# SIFT ๊ฐ์ฒด ์์ฑ
sift = cv2.SIFT_create()
# ํน์ง์ ๋ฐ ๋์คํฌ๋ฆฝํฐ ์ถ์ถ
keypoints1, descriptors1 = sift.detectAndCompute(image1, None)
keypoints2, descriptors2 = sift.detectAndCompute(image2, None)
# ๋งค์นญ์ ์ํ BFMatcher ์์ฑ
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
# ํน์ง์ ๋งค์นญ
matches = bf.match(descriptors1, descriptors2)
# ๋งค์นญ ๊ฒฐ๊ณผ ์ ๋ ฌ
matches = sorted(matches, key=lambda x: x.distance)
# ๋งค์นญ ๊ฒฐ๊ณผ ์๊ฐํ
result_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, matches, None)
print(f"NUmber of match result : {len(matches)}/{len(descriptors1)}")
# ๊ฒฐ๊ณผ ์ด๋ฏธ์ง ์ถ๋ ฅ
cv2.imshow('SIFT Matches', result_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
์ด ๋ฐฉ๋ฒ๋ cat, dog, rabbit์ ๊ตฌ๋ถํ์ง๋ ๋ชปํ๋ค.
ํน์ง ๊ธฐ๋ฐ ๋ฐฉ๋ฒ - SURF(Speeded-Up Robust Features)
์ด๋ฏธ์ง์ ํน์ง์ ์ ์ถ์ถํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋งค์นญํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก SIFT์ ๋์์ผ๋ก ๊ฐ๋ฐ๋์์ผ๋ฏ๋ก ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ํน์ง์ ์ถ์ถ์ ๋ชฉํ๋กํ๋ค.
import cv2
import numpy as np
# ์ด๋ฏธ์ง ๋ก๋
img1 = cv2.imread('cat1.jpg', cv2.IMREAD_GRAYSCALE) # ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง
img2 = cv2.imread('cat2.jpg', cv2.IMREAD_GRAYSCALE) # ๋ ๋ฒ์งธ ์ด๋ฏธ์ง
# SURF ๊ฐ์ฒด ์์ฑ
surf = cv2.xfeatures2d.SURF_create(hessianThreshold=400)
# ํน์ง์ ๊ฒ์ถ ๋ฐ ๊ธฐ์ ์ ์์ฑ
keypoints1, descriptors1 = surf.detectAndCompute(img1, None)
keypoints2, descriptors2 = surf.detectAndCompute(img2, None)
# ๋งค์นญ์ ์ํ BFMatcher ๊ฐ์ฒด ์์ฑ
bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True)
# ํน์ง์ ๋งค์นญ
matches = bf.match(descriptors1, descriptors2)
# ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ๊ฑฐ๋ฆฌ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
matches = sorted(matches, key=lambda x: x.distance)
# ๋งค์นญ ๊ฒฐ๊ณผ ์๊ฐํ
img_matches = cv2.drawMatches(img1, keypoints1, img2, keypoints2, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
print(f"NUmber of match result : {len(matches)}/{len(descriptors1)}")
# ๊ฒฐ๊ณผ ์ด๋ฏธ์ง ํ์
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV 3.4.2 ์ด์์์๋ ์ ์๊ถ์ผ๋ก ๋ณดํธ๋๊ธฐ ๋๋ฌธ์ CMake ์ต์ ์ ํ์ฑํํด์ OpenCV๋ฅผ ๋น๊ณต์์ ์ผ๋ก ์ฌ์ฉํด์ผํ๋ค.
๋ฒกํฐ ๊ณต๊ฐ - Cosine Similarity, Hamming Distance
Cosine Similarity๋ ๋ ๋ฒกํฐ ๊ฐ์ ์ฝ์ฌ์ธ ๊ฐ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฌ์ฑ์ ์ธก์ ํ๊ณ ๋ ๋ฒกํฐ๊ฐ ์ผ๋ง๋ ์ ์ฌํ์ง๋ฅผ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ผ๋ก ๋ํ๋ด๋ฉฐ, 1์ ๊ฐ๊น์ธ์๋ก ์ ์ฌ์ฑ์ด ๋๊ณ , 0์ ๊ฐ๊น์ธ์๋ก ์ ์ฌ์ฑ์ด ๋ฎ๋ค.
- ์ฃผ๋ก ์ด์ง ๋ฐ์ดํฐ๋ ๋ฌธ์์ด์ ์ ์ฌ์ฑ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋ ๋ฒกํฐ์ ๊ธธ์ด๊ฐ ๊ฐ์์ผ ํ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์์น์ ์์ ์๋ฅผ ์ธ๋ ๋ฐฉ์์ด๋ค.
- ๋ฒกํฐ์ ๋ฐฉํฅ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฌ์ฑ์ ์ธก์ ํ๋ค.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from PIL import Image
def image_to_vector(image_path):
image = Image.open(image_path).convert('L') # ํ๋ฐฑ ์ด๋ฏธ์ง๋ก ๋ณํ
image = image.resize((100, 100)) # ํฌ๊ธฐ ์กฐ์
return np.array(image).flatten() # 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ
# ์ด๋ฏธ์ง ๊ฒฝ๋ก
image1_path = 'cat1.jpg'
# image2_path = 'cat2.jpg'
image2_path = 'dog1.jpg'
# ์ด๋ฏธ์ง ๋ฒกํฐํ
vector1 = image_to_vector(image1_path)
vector2 = image_to_vector(image2_path)
# ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
similarity = cosine_similarity([vector1], [vector2])
print(f"Cosine Similarity: {similarity[0][0]}")
Hamming Distance๋ ๋ ๋ฌธ์์ด ๋๋ ์ด์ง๋ฒกํฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ ๋ฒกํฐ์ ๊ธธ์ด๊ฐ ๊ฐ์ ๋, ์๋ก ๋ค๋ฅธ ์์น์ ์์ ์๋ฅผ ๊ณ์ฐํ์ฌ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํ๋ค.
- ์ฃผ๋ก ์ด์ง ๋ฐ์ดํฐ๋ ๋ฌธ์์ด์ ์ ์ฌ์ฑ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋ ๋ฒกํฐ์ ๊ธธ์ด๊ฐ ๊ฐ์์ผ ํ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์์น์ ์์ ์๋ฅผ ์ธ๋ ๋ฐฉ์์ด๋ค.
- ๋ ๋ฒกํฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ค.
import numpy as np
from PIL import Image
def image_to_binary_vector(image_path):
image = Image.open(image_path).convert('1') # ์ด์ง ์ด๋ฏธ์ง๋ก ๋ณํ
return np.array(image).flatten() # 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ
# ์ด๋ฏธ์ง ๊ฒฝ๋ก
image1_path = 'cat1.jpg'
image2_path = 'dog1.jpg'
# ์ด์ง ์ด๋ฏธ์ง ๋ฒกํฐํ
binary_vector1 = image_to_binary_vector(image1_path)
binary_vector2 = image_to_binary_vector(image2_path)
# ํด๋ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
def hamming_distance(A, B):
if len(A) != len(B):
raise ValueError("๋ ๋ฒกํฐ์ ๊ธธ์ด๋ ๊ฐ์์ผ ํฉ๋๋ค.")
return np.sum(A != B)
distance = hamming_distance(binary_vector1, binary_vector2)
print(f"Hamming Distance: {distance}")
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ๋ค์ ์ ๋๋ก๋ ๋น๊ต๋ฅผ ํ๊ธฐ ํ๋ค๋ค. ์ด๋ฏธ์ง ๋ถ๋ฅ, ๋ฒกํฐ DB ๊ตฌ์ถ ๋ฑ์ ์ด๋ฏธ์ง ์ ์ฌ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋ฒกํฐํํ๋ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฒกํฐํํด์ผ ํ๋ค.
AI๋ฅผ ์ฌ์ฉ
CNN๊ณผ ๊ฐ์ ๋ชจ๋ธ๋ก ์ด๋ฏธ์ง๋ฅผ ํน์ง ๋ฒกํฐ๋ก ๋ณํ ํ, ์ด๋ฏธ์ง ๋ฒกํฐ๋ค ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ค.
๋ํ์ ์ผ๋ก Siamese Network, Pre-trained CNN ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
'AI > Computer Vision' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Computer Vision] Skeletonization (0) | 2024.09.20 |
---|---|
[Computer Vision] Segmentation (0) | 2024.09.19 |
[Computer Vision] Depth (0) | 2024.09.15 |
[Computer Vision] Trapped-ball Segmentation (0) | 2024.09.14 |
[Computer Vision] IoU(Intersection over Union) (0) | 2024.09.12 |