Sử dụng Python để áp dụng bộ lọc cho hình ảnh DICOM
Tạo ứng dụng Python để lọc hình ảnh và hình ảnh DICOM thông qua API máy chủ
Cách lọc hình ảnh và ảnh DICOM bằng Python
Mỗi bức ảnh được chụp đẹp đều có tiềm năng cải tiến, cơ hội phát triển thành một thứ gì đó hoàn toàn khác biệt và nổi lên như một tác phẩm có một không hai. Bộ lọc đóng vai trò như một công cụ linh hoạt trong việc nâng cao hình ảnh và hình ảnh, cho phép bạn nâng cao độ sắc nét có chọn lọc, làm mờ hoặc loại bỏ các thành phần màu sắc để có kết quả thực sự đặc biệt. Thử nghiệm các hiệu ứng hình ảnh riêng lẻ hoặc kết hợp để hòa trộn các dải màu một cách liền mạch, loại bỏ nhiễu không mong muốn và nâng cao độ sắc nét của các cạnh đối tượng trong ảnh của bạn. Để áp dụng các bộ lọc hình ảnh này cho tệp DICOM, chúng tôi sẽ sử dụng Aspose.Imaging for Python via .NET API là API chuyển đổi và thao tác hình ảnh giàu tính năng, mạnh mẽ và dễ sử dụng cho nền tảng Python. Bạn có thể cài đặt nó bằng lệnh sau từ lệnh hệ thống của mình.
Dòng lệnh hệ thống
>> pip install aspose-imaging-python-net
Các bước để Lọc các DICOM qua Python
Bạn cần aspose-imaging-python-net để thử quy trình công việc sau trong môi trường của riêng bạn.
- Tải tệp DICOM bằng phương pháp Image.Load
- Lọc hình ảnh;
- Lưu hình ảnh nén vào đĩa ở định dạng Aspose.Imaging được hỗ trợ
yêu cầu hệ thống
Aspose.Imaging cho Python được hỗ trợ trên tất cả các hệ điều hành chính. Chỉ cần đảm bảo rằng bạn có các điều kiện tiên quyết sau.
- Microsoft Windows/Linux với .NET Core Runtime.
- Trình quản lý gói Python và PyPi.
Lọc hình ảnh DICOM - Python
from aspose.imaging import RasterImage, Image, IMultipageImage, Rectangle | |
from aspose.imaging.imagefilters.filteroptions import * | |
from aspose.imaging.imageoptions import PngOptions | |
from aspose.pycore import as_of, is_assignable | |
import os | |
if 'TEMPLATE_DIR' in os.environ: | |
templates_folder = os.environ['TEMPLATE_DIR'] | |
else: | |
templates_folder = r"C:\Users\USER\Downloads\templates" | |
delete_output = 'SAVE_OUTPUT' not in os.environ | |
def delete_file(file): | |
if delete_output: | |
os.remove(file) | |
def small_rectangular_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), SmallRectangularFilterOptions()), "smallrectangular") | |
def big_rectangular_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), BigRectangularFilterOptions()), "bigrectangular") | |
def sharpen_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), SharpenFilterOptions()), "sharpen") | |
def motion_wiener_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), MotionWienerFilterOptions(20, 2, 0)), "motionwiener") | |
def bilateral_smoothing_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), BilateralSmoothingFilterOptions()), "bilateralsmoothing") | |
def gauss_blur_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), GaussianBlurFilterOptions(5, 4)), "gaussblur") | |
def gauss_wiener_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), GaussWienerFilterOptions(5, 5)), "gausswiener") | |
def median_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), MedianFilterOptions(20)), "median") | |
def filter_images(do_filter, filter_name): | |
obj_init = [] | |
obj_init.append("jpg") | |
obj_init.append("png") | |
obj_init.append("bmp") | |
obj_init.append("apng") | |
obj_init.append("dicom") | |
obj_init.append("jp2") | |
obj_init.append("j2k") | |
obj_init.append("tga") | |
obj_init.append("webp") | |
obj_init.append("tiff") | |
obj_init.append("gif") | |
obj_init.append("ico") | |
raster_formats = obj_init | |
obj_init2 = [] | |
obj_init2.append("svg") | |
obj_init2.append("otg") | |
obj_init2.append("odg") | |
obj_init2.append("eps") | |
obj_init2.append("wmf") | |
obj_init2.append("emf") | |
obj_init2.append("wmz") | |
obj_init2.append("emz") | |
obj_init2.append("cmx") | |
obj_init2.append("cdr") | |
vector_formats = obj_init2 | |
all_formats = raster_formats | |
all_formats.extend(vector_formats) | |
for format_ext in all_formats: | |
input_file = os.path.join(templates_folder, f"template.{format_ext}") | |
is_vector_format = format_ext in vector_formats | |
if is_vector_format: | |
input_file = rasterize_vector_image(format_ext, input_file) | |
output_file = os.path.join(templates_folder, f"{filter_name}_{format_ext}.png") | |
print(format_ext) | |
# explicit type casting from Image to RasterImage | |
with as_of(Image.load(input_file), RasterImage) as image: | |
multi_page = None | |
# if image implements an IMultipageImage interface | |
if is_assignable(image, IMultipageImage): | |
multi_page = as_of(image, IMultipageImage) | |
if multi_page is not None and multi_page.page_count > 1: | |
page_index = 0 | |
for page in multi_page.pages: | |
file_name = f"{filter_name}_page{page_index}_{format_ext}.png" | |
do_filter(as_of(page, RasterImage)) | |
page.save(templates_folder + file_name, PngOptions()) | |
delete_file(templates_folder + file_name) | |
page_index += 1 | |
else: | |
do_filter(image) | |
image.save(output_file, PngOptions()) | |
delete_file(output_file) | |
if is_vector_format: | |
delete_file(input_file) | |
def rasterize_vector_image(format_ext, input_file): | |
output_file = os.path.join(templates_folder, "rasterized.{format_ext}.png") | |
with Image.load(input_file) as image: | |
image.save(output_file, PngOptions()) | |
return output_file | |
# run | |
median_filter() | |
Giới thiệu về Aspose.Imaging cho API Python
Aspose.Imaging API là một giải pháp xử lý hình ảnh để tạo, sửa đổi, vẽ hoặc chuyển đổi hình ảnh (ảnh) trong các ứng dụng. Nó cung cấp: xử lý hình ảnh đa nền tảng, bao gồm nhưng không giới hạn ở chuyển đổi giữa các định dạng hình ảnh khác nhau (bao gồm xử lý hình ảnh nhiều trang hoặc nhiều khung hình đồng nhất), các sửa đổi như vẽ, làm việc với đồ họa nguyên thủy, chuyển đổi (thay đổi kích thước, cắt, lật và xoay , binarization, thang độ xám, điều chỉnh), các tính năng thao tác hình ảnh nâng cao (lọc, phối màu, tạo mặt nạ, giải mã) và các chiến lược tối ưu hóa bộ nhớ. Đây là một thư viện độc lập và không phụ thuộc vào bất kỳ phần mềm nào cho các thao tác hình ảnh. Người ta có thể dễ dàng thêm các tính năng chuyển đổi hình ảnh hiệu suất cao với các API gốc trong các dự án. Đây là các API tại chỗ 100% riêng tư và hình ảnh được xử lý tại máy chủ của bạn.Lọc các DICOM qua Ứng dụng Trực tuyến
Lọc tài liệu DICOM bằng cách truy cập [trang web Bản trình diễn trực tiếp] của chúng tôi ( https://products.aspose.app/imaging/image-Filter) . Bản demo trực tiếp có những lợi ích sau
DICOM Những gì là DICOM Định dạng tệp
DICOM là từ viết tắt của Digital Imaging and Communications in Medicine, liên quan đến lĩnh vực Tin học Y tế. DICOM là sự kết hợp giữa định nghĩa định dạng tệp và một giao thức truyền thông mạng. DICOM sử dụng phần mở rộng .DCM. .DCM tồn tại ở hai định dạng khác nhau, tức là định dạng 1.x và định dạng 2.x. Định dạng DCM 1.x còn có sẵn trong hai phiên bản bình thường và mở rộng. DICOM được sử dụng để tích hợp các thiết bị hình ảnh y tế như máy in, máy chủ, máy quét, v.v. từ các nhà cung cấp khác nhau và cũng chứa dữ liệu nhận dạng của từng bệnh nhân để tạo tính duy nhất. Các tệp DICOM có thể được chia sẻ giữa hai bên nếu họ có khả năng nhận dữ liệu hình ảnh ở định dạng DICOM. Phần giao tiếp của DICOM là giao thức lớp ứng dụng và sử dụng TCP / IP để giao tiếp giữa các thực thể. Các giao thức HTTP và HTTPS được sử dụng cho các dịch vụ web của DICOM. Các phiên bản được hỗ trợ bởi các dịch vụ web là 1.0, 1.1, 2 hoặc mới hơn.
Đọc thêmCác định dạng bộ lọc được hỗ trợ khác
Sử dụng Python, người ta có thể dễ dàng Lọc các định dạng khác nhau bao gồm.