전체 글
멋지게 살고 싶다🐝 (이미지는 stable-diffusion으로 생성하였습니다.)
-
무게중심 구하기 thresholding은 cv2.threshold 함수를 사용하면 된다. 폐곡선을 여러개 가진 이미지라면 여러개의 무게중심 좌표가 리턴된다. def COG(input_array): """ :param input_array: 반드시 thresholding 된 array여야 함. :return: """ global cx, cy contours, hierarchy = cv2.findContours(input_array, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: M = cv2.moments(cnt) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) result_cx.append(..
[python] center of gravity (무게중심) 구하기무게중심 구하기 thresholding은 cv2.threshold 함수를 사용하면 된다. 폐곡선을 여러개 가진 이미지라면 여러개의 무게중심 좌표가 리턴된다. def COG(input_array): """ :param input_array: 반드시 thresholding 된 array여야 함. :return: """ global cx, cy contours, hierarchy = cv2.findContours(input_array, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: M = cv2.moments(cnt) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) result_cx.append(..
2019.10.28 -
np.percentile은 값 중에서 특정 백분위수에 해당하는 값을 구해줍니다. 백분위수란 값을 이뤄진 자료를 순서대로 나열했을 때 백분율로 나타낸 특정 위치의 값을 이르는 용어입니다. 일반적으로 크기가 작은 것부터 나열하여 가장 작은 것을 0, 가장 큰 것을 100으로 합니다. 100개의 값을 가진 어떤 자료의 20 백분위수는 그 자료의 값들 중 20번째로 작은 값을 뜻하며, 50 백분위수는 중앙값과 같습니다. 백분위수이기 때문에 범위는 0~100에 해당합니다. opencv 같은 모듈로 영상처리를 할 때 percentile을 사용하면 룰베이스 알고리즘을 짤 때 도움이 될 수 있습니다. 아래는 nifti 뇌영상을 로드 후 np.percentile으로 분위수에 해당하는 intensity를 구하는 방법입니다..
[python] np.percentile 사용법np.percentile은 값 중에서 특정 백분위수에 해당하는 값을 구해줍니다. 백분위수란 값을 이뤄진 자료를 순서대로 나열했을 때 백분율로 나타낸 특정 위치의 값을 이르는 용어입니다. 일반적으로 크기가 작은 것부터 나열하여 가장 작은 것을 0, 가장 큰 것을 100으로 합니다. 100개의 값을 가진 어떤 자료의 20 백분위수는 그 자료의 값들 중 20번째로 작은 값을 뜻하며, 50 백분위수는 중앙값과 같습니다. 백분위수이기 때문에 범위는 0~100에 해당합니다. opencv 같은 모듈로 영상처리를 할 때 percentile을 사용하면 룰베이스 알고리즘을 짤 때 도움이 될 수 있습니다. 아래는 nifti 뇌영상을 로드 후 np.percentile으로 분위수에 해당하는 intensity를 구하는 방법입니다..
2019.10.24 -
딥러닝에서 여러 modality의 영상을 인풋으로 넣고 싶을 때, 여러 영상을 하나로 합쳐 인풋으로 넣는 방법이 있다. 만약 T1 강조 영상의 dimension이 (100, 100, 100)이고, T2 강조 영상의 dimension이 (100, 100, 100)이라면 이 두 영상을 인풋으로 넣고 싶을 때 (100, 100, 100, 2)의 dimension을 가진 한 영상으로 합쳐서 인풋으로 넣을 수 있다는 것이다. img1 = nib.load(img1).get_fdata() img2 = nib.load(img2).get_fdata() img_concat = np.stack((img1, img2), axis=-1) 이런 방법으로 하면 두 영상을 인풋 하나로 넣을 수 있다.
[python] np.stack / 여러 영상을 한 이미지의 여러 채널로 합치기(의료영상)딥러닝에서 여러 modality의 영상을 인풋으로 넣고 싶을 때, 여러 영상을 하나로 합쳐 인풋으로 넣는 방법이 있다. 만약 T1 강조 영상의 dimension이 (100, 100, 100)이고, T2 강조 영상의 dimension이 (100, 100, 100)이라면 이 두 영상을 인풋으로 넣고 싶을 때 (100, 100, 100, 2)의 dimension을 가진 한 영상으로 합쳐서 인풋으로 넣을 수 있다는 것이다. img1 = nib.load(img1).get_fdata() img2 = nib.load(img2).get_fdata() img_concat = np.stack((img1, img2), axis=-1) 이런 방법으로 하면 두 영상을 인풋 하나로 넣을 수 있다.
2019.10.10 -
아래의 코드를 붙여 넣으면 된다. from tensorflow.compat.v1 import ConfigProto from tensorflow.compat.v1 import InteractiveSession config = ConfigProto() config.gpu_options.allow_growth = True session = InteractiveSession(config=config) 끝!
cudnn failed to initialize 에러 해결방법아래의 코드를 붙여 넣으면 된다. from tensorflow.compat.v1 import ConfigProto from tensorflow.compat.v1 import InteractiveSession config = ConfigProto() config.gpu_options.allow_growth = True session = InteractiveSession(config=config) 끝!
2019.10.10 -
nifti 영상 로드: import nibabel as nib import numpy as np # load nifti image img = nib.load(nifti_image_path) img_data = img.get_fdata() np.where 조건 1개 적용: # one condition modified_image = np.where((img_data 300), 0, img_data..
[python] np.where 사용법 (nifti 영상)nifti 영상 로드: import nibabel as nib import numpy as np # load nifti image img = nib.load(nifti_image_path) img_data = img.get_fdata() np.where 조건 1개 적용: # one condition modified_image = np.where((img_data 300), 0, img_data..
2019.10.07 -
# nifti 이미지 읽기 import nibabel as nib img = nib.load(이미지_경로) img_data = img.get_fdata() # nifti 이미지 저장하기 nii_img = nib.Nifti1Image(img_data, img.affine, img.header) nib.save(nii_img, 저장할_경로) # dicom 이미지 읽기 import pydicom img = pydicom.dcmread(이미지_경로) img_data = img.pixel_array() 도움이 되셨다면 아무 광고나 클릭 한 번 부탁드립니다👍
[python] nibabel, pydicom array 읽는 방법# nifti 이미지 읽기 import nibabel as nib img = nib.load(이미지_경로) img_data = img.get_fdata() # nifti 이미지 저장하기 nii_img = nib.Nifti1Image(img_data, img.affine, img.header) nib.save(nii_img, 저장할_경로) # dicom 이미지 읽기 import pydicom img = pydicom.dcmread(이미지_경로) img_data = img.pixel_array() 도움이 되셨다면 아무 광고나 클릭 한 번 부탁드립니다👍
2019.10.02 -
numpy.expand_dims는 차원을 확장하고 싶을 때 쓰는 함수이다. 보통 그레이스케일의 이미지에 1개의 채널을 추가해주거나 (128, 128) > (128, 128, 1) 배치를 정의하기 위해 사용한다. (128, 128, 1) > (1, 128, 128, 1) 인풋으로 array를 받는다. >>> import numpy as np >>> np.array([1,1]) array([1, 1]) >>> A = np.array([1,1]) >>> A.shape (2,) >>> np.expand_dims(A, axis=0) array([[1, 1]]) >>> np.expand_dims(A, axis=0).shape (1, 2) >>> np.expand_dims(A, axis=1).shape (2, 1) ..
[python] numpy.expand_dims / np.newaxisnumpy.expand_dims는 차원을 확장하고 싶을 때 쓰는 함수이다. 보통 그레이스케일의 이미지에 1개의 채널을 추가해주거나 (128, 128) > (128, 128, 1) 배치를 정의하기 위해 사용한다. (128, 128, 1) > (1, 128, 128, 1) 인풋으로 array를 받는다. >>> import numpy as np >>> np.array([1,1]) array([1, 1]) >>> A = np.array([1,1]) >>> A.shape (2,) >>> np.expand_dims(A, axis=0) array([[1, 1]]) >>> np.expand_dims(A, axis=0).shape (1, 2) >>> np.expand_dims(A, axis=1).shape (2, 1) ..
2019.09.30 -
뇌 MR 영상은 resolution이 높지 않다. CT 같은 경우는 복셀당 1μm X 1μm X 1μm 인 경우도 봤지만, 뇌 MR 영상의 경우에는 0.5mm 이하를 보기 힘들다. 7T MRI가 아직 사람에게 무해한 지 검증이 되지 않았고, 3T, 1.5T MRI가 상용화되고 있기 때문이다. 이런 이유 때문에 PVE라는 한계점이 생기게 된다. PVE는 한 복셀에 여러 tissue가 포함될 수 있는 확률을 말한다. 뇌 MR 영상의 표준 영상은 보통 1mm X 1mm X 1mm의 해상도를 가지는데, 1mm 크기의 복셀로는 아래 그림처럼 뇌를 정교하게 표현할 수 없는 상황이 발생한다. 파란선은 tissue간 정확한 경계를 표현한 예시라고 보면 된다. 파란선의 경계에 따라 tissue가 구분된다고 하면, 회백질..
Partial Volume Effect (PVE)뇌 MR 영상은 resolution이 높지 않다. CT 같은 경우는 복셀당 1μm X 1μm X 1μm 인 경우도 봤지만, 뇌 MR 영상의 경우에는 0.5mm 이하를 보기 힘들다. 7T MRI가 아직 사람에게 무해한 지 검증이 되지 않았고, 3T, 1.5T MRI가 상용화되고 있기 때문이다. 이런 이유 때문에 PVE라는 한계점이 생기게 된다. PVE는 한 복셀에 여러 tissue가 포함될 수 있는 확률을 말한다. 뇌 MR 영상의 표준 영상은 보통 1mm X 1mm X 1mm의 해상도를 가지는데, 1mm 크기의 복셀로는 아래 그림처럼 뇌를 정교하게 표현할 수 없는 상황이 발생한다. 파란선은 tissue간 정확한 경계를 표현한 예시라고 보면 된다. 파란선의 경계에 따라 tissue가 구분된다고 하면, 회백질..
2019.08.21