Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

tôi đang thực hiện dự án bone fracture detection sử dụng máy học.

đoạn code dưới


tôi muốn thêm một bước nữa là
canny edge detection để tăng hiệu quả của mô hình. hãy giúp tôi viết mã thực hiện ý
tưởng này. tôi muốn một bài code hoàn chỉnh.

code của tôi:


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
from PIL import Image
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import cv2
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Flatten, Dense
from tensorflow.keras import applications
from tensorflow.keras.applications.resnet50 import ResNet50
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

import imgaug.augmenters as iaa


from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
path = '/content/drive/MyDrive/Bone'
import os
os.path.isdir(path)

fractured_augmented_dir = "/content/drive/MyDrive/Bone/FracAtlas/augment_flip"
fractured_augmented_files = get_files_from_directory(fractured_augmented_dir,
'fractured')
df_augmented = pd.DataFrame(fractured_augmented_files)
df_augmented
# Combine the original dataframe with the augmented dataframe
df_train = pd.concat([df_train, df_augmented]).reset_index(drop=True)
import cv2
from skimage.feature import hog
from skimage.filters import median
from skimage.exposure import equalize_hist
def average_filter_image(image, kernel_size=3):
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32) / (kernel_size *
kernel_size)
return cv2.filter2D(image, -1, kernel)
def apply_gaussian_filter(image, kernel_size=(3, 3), sigma=1):
return cv2.GaussianBlur(image, kernel_size, sigma)
def median_filter_image(image, kernel_size=3):
return cv2.medianBlur(image, kernel_size)
def equalize_histogram(img):
if len(img.shape) == 3 and img.shape[2] == 3:
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
else:
gray_img = img.copy()

gray_img = gray_img.astype(np.uint8)

equalized_img = cv2.equalizeHist(gray_img)

if len(img.shape) == 3 and img.shape[2] == 3:


img = cv2.cvtColor(equalized_img, cv2.COLOR_GRAY2BGR)
else:
img = equalized_img

return img
from skimage.feature import hog
from skimage import exposure
def hog_extra_train(image, resize_shape=(256,256)):

average_filter = average_filter_image(image, kernel_size=3)


filtered_image = apply_gaussian_filter(image, (3, 3), sigma=1)
#median_filtered = median_filter_image(filtered_image, kernel_size=3)

# Apply the median filter second time


#median_filter2 = median_filter_image(median_filter1, kernel_size=3)

# Equalize the histogram of the image


equalized = equalize_histogram(filtered_image)

img = cv2.cvtColor(equalized, cv2.COLOR_BGR2GRAY)


img = cv2.resize(img, resize_shape)

bins = 9
cell_size = (8, 8)
cpb = (2, 2)
norm = "L2-Hys"

features = hog(img, orientations=bins, pixels_per_cell=cell_size,


cells_per_block=cpb, block_norm=norm, feature_vector=True)
return features
def hog_extra_test(image, resize_shape=(256,256)):

img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)


img = cv2.resize(img, resize_shape)

bins = 9
cell_size = (8, 8)
cpb = (2, 2)
norm = "L2-Hys"

features = hog(img, orientations=bins, pixels_per_cell=cell_size,


cells_per_block=cpb, block_norm=norm, feature_vector=True)
return features
hog_features_train = []

for idx, row in df_train.iterrows():


image_path = row['filename']
image = cv2.imread(image_path)
features = hog_extra_train(image)
hog_features_train.append(features)
hog_features_train = np.vstack(hog_features_train)
hog_features_test = []

for idx, row in df_test.iterrows():


image_path = row['filename']
image = cv2.imread(image_path)
features = hog_extra_test(image)
hog_features_test.append(features)
hog_features_test = np.vstack(hog_features_test)
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
model_2 = GaussianNB()
model_2.fit(hog_features_train, df_train['label'])
train_predict = model_2.predict(hog_features_train)
print(accuracy_score(df_train['label'], train_predict))
print(classification_report(train_predict, df_train['label']))
test_predict = model_2.predict(hog_features_test)
print(accuracy_score(df_test['label'], test_predict))
print(classification_report(test_predict, df_test['label']))

You might also like