Bộ lọc phái sinh python

Trong blog hôm nay của loạt bài OpenCV này, chúng tôi sẽ triển khai Bộ lọc thông cao Laplacian hoặc đạo hàm bậc 2 Laplacian cho hình ảnh, đây là một xử lý hình ảnh rất hữu ích chủ yếu được sử dụng trong các lĩnh vực phòng thủ (trong tên lửa hoặc xe tăng) để theo dõi xe tăng và xe tải của kẻ thù

Đọc toàn bộ bài viết với mã nguồn tại đây — https. // dự án máy học. net/laplacian-derivative-thứ-2/

Hãy làm nó…

Bước 1 — Nhập các thư viện cần thiết cho đạo hàm bậc 2 Laplacian

import cv2
import matplotlib.pyplot as plt

Bước 2 — Đọc hình ảnh

img = cv2.imread(‘4.tiff’)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

  • Sau khi đọc, chúng tôi đang chuyển đổi hình ảnh từ BGR sang RGB, vì chúng tôi biết rằng cv2 tự động đọc hình ảnh ở định dạng BGR, trong khi ban đầu hình ảnh ở định dạng RGB
  • Đó là lý do tại sao chúng ta cần chuyển đổi nó trở lại

Bước 3 — Hãy làm mờ hình ảnh để loại bỏ nhiễu

img = cv2.GaussianBlur(img,(13,13),0)
  • Ở đây chúng tôi đang sử dụng Gaussian Blur để loại bỏ Gaussian Noise khỏi hình ảnh
  • Chúng tôi đang làm điều này bởi vì Laplacian là một hoạt động đạo hàm bậc hai và nó rất nhạy cảm với tiếng ồn

Bước 4 — Truyền ảnh qua đạo hàm cấp 2 Laplacian

cú pháp. cv2. Laplacian(src, ddepth[, ksize[, scale[, delta[, borderType]]]]])

edges = cv2.Laplacian(img, -1, ksize=5, scale=1,delta=0,borderType=cv2.BORDER_DEFAULT)
  • Hàm Laplacian tính toán Laplacian của ảnh nguồn bằng cách cộng các đạo hàm x và y thứ hai được tính bằng toán tử Sobel
  • Không giống như các bộ lọc bậc nhất phát hiện các cạnh dựa trên cực đại hoặc cực tiểu cục bộ, Laplacian phát hiện các cạnh tại các điểm giao nhau bằng 0 i. e. trong đó giá trị của đạo hàm thay đổi từ âm sang dương và ngược lại
  • Hãy nhớ Sobel X và Sobel Y lần lượt là các đạo hàm bậc nhất theo hướng X và Y và mặt khác, Laplacian là tổng của các đạo hàm bậc hai theo hướng X và Y

Bước 5 - Hãy vẽ kết quả

output = [img, edges]
titles = ['Original', 'Passed through HPF']

for i in range(2):
plt.subplot(1, 2, i + 1)
plt.imshow(output[i], cmap='gray')
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.show()

LƯU Ý — Bạn có thể đọc thêm về Toán tử Laplace tại đây

Hãy cho tôi biết nếu có bất kỳ câu hỏi nào liên quan đến phái sinh bậc 2 Laplacian bằng cách liên hệ với tôi qua email hoặc LinkedIn

Để biết thêm giải thích về mã và mã nguồn, hãy truy cập tại đây - https. // dự án máy học. net/laplacian-derivative-thứ-2/

Vì vậy, đây là tất cả những gì dành cho blog này, cảm ơn vì đã đọc nó và tôi hy vọng bạn sẽ mang theo thứ gì đó sau khi đọc nó và cho đến lần sau 👋…

Đọc bài viết trước của tôi. CÁCH VẼ BIỂU ĐỒ HÌNH ẢNH MỨC XÁM THEO 2 CÁCH TRONG PYTHON SỬ DỤNG OPENCV

Kiểm tra các dự án học máy khác của tôi, dự án học sâu, dự án thị giác máy tính, dự án NLP, dự án Flask tại machinelearningprojects. bọc lưới

Tại sao không sử dụng những gì đã hoạt động hay còn gọi là np. gradient và đặt nó trở lại khung dữ liệu của bạn?


### imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

### data
time = [3.64,4.14,4.64,5.13,5.66,6.17,6.67,7.17,7.69,8.2,8.7,9.2,9.72,10.22,10.72,11.22,11.72,12.22,12.7,13.22,13.73,14.25,14.77,15.28,15.8,16.28,16.83,17.31,17.81,18.31,18.83,19.33,19.84,20.34,20.84,21.34,21.88,22.39,22.89,23.39,23.89,24.41,21.88,22.39,22.89,23.39,23.89,24.41]
value = [0.0000000000122,0.0000000000244,0.0000000000122,0.0000000000244,0.0000000000122,0.0000000000122,0.0000000000244,0.0000000000244,0.0000000000122,0.0000000000244,0.0000000000122,0.0000000000244,0.0000000000244,0.0000000000122,0.0000000000122,0.0000000000122,0.0000000000122,0.0000000000122,-0.000000000195,-0.00000000157,-0.00000000304,-0.00000000439,-0.00000000573,-0.00000000702,-0.00000000826,-0.00000000861,-0.0000000087,-0.00000000876,-0.0000000088,-0.00000000883,-0.00000000891,-0.00000000898,-0.00000000902,-0.00000000905,-0.00000000906,-0.00000000907,-0.00000000908,-0.00000000908,-0.00000000909,-0.00000000909,-0.00000000909,-0.00000000909,-0.00000000908,-0.00000000908,-0.00000000909,-0.00000000909,-0.00000000909,-0.00000000909]

### dataframe creation
# df = pd.read_csv('test.csv', names=["time", "value"])
df = pd.DataFrame({'time':time, 'value':value})
plt.plot(df.time,df.value)

đầu ra


Tiếp theo, bạn có thể phân biệt và như bạn có thể thấy trong 18 hàng đầu tiên mà bạn đã đề cập, có nhiều điểm có độ dốc lớn hơn 0