Hướng dẫn how to read tiff image in python - cách đọc hình ảnh tiff trong python
Đầu tiên, tôi đã tải xuống một hình ảnh TIFF thử nghiệm từ trang này có tên là 9. Sau đó, tôi đã mở với PIL như thế này: Show
Điều này cho thấy hình ảnh cầu vồng. Để chuyển đổi thành một mảng numpy, nó đơn giản như:
Chúng ta có thể thấy rằng kích thước của hình ảnh và hình dạng của mảng khớp lên:
Và mảng chứa các giá trị 0:
Khi bạn đã hoàn thành việc sửa đổi mảng, bạn có thể biến nó lại thành hình ảnh PIL như thế này: TIFF định dạng tệp được sử dụng để lưu trữ các hình ảnh được raster hóa. Một thư viện có tên Thư viện trừu tượng hóa dữ liệu không gian địa lý GDAL được thiết kế đặc biệt để đọc các tệp raster này, cũng như các định dạng tệp khác, chẳng hạn như các định dạng vector. Thư viện GDAL là một phần của Quỹ không gian địa lý nguồn mở. Để cài đặt các mô -đun cần thiết, chúng tôi có thể sử dụng các lệnh sau trong thiết bị đầu cuối của chúng tôi: Chúng tôi yêu cầu các mô -đun matplotlib và gdal trong Python để hiển thị hình ảnh TIFF. Approach:
Để giải thích hướng dẫn này, chúng tôi sẽ sử dụng hình ảnh sau ở định dạng TIFF: Thực hiện từng bước:Bước 1: Nhập các mô -đun và mở tệp. Importing the modules and opening the file. Bước 2: Đếm tổng số băng tần. Counting the total number of bands. Output: Bước 3: Tìm nạp các ban nhạc Fetching the bands Chúng tôi sử dụng GetRasterBand (INT) của GDAL để có được các ban nhạc. Điều quan trọng cần lưu ý là giá trị mà chúng ta vượt qua sẽ luôn bắt đầu bằng một (lập chỉ mục của các dải bắt đầu từ 1) Bước 4: Đọc các ban nhạc dưới dạng mảng numpy. Reading the bands as NumPy arrays. GDAL cung cấp phương thức readasArray () để chuyển đổi các dải đó trong các mảng numpy và trả về các mảng. Bước 5: Vẽ các mảng bằng hàm imshow () của matplotlib. Plotting the arrays using imshow() function of matplotlib. Để vẽ ba mảng, chúng tôi sẽ xếp chúng lên theo thứ tự. Mã cuối cùng: Đầu ra cuối cùng: Sự kết luậnTrong hướng dẫn này, chúng tôi đã thảo luận về cách chúng tôi có thể trực quan hóa hình ảnh định dạng tệp TIFF bằng cách sử dụng các mô -đun matplotlib và vui mừng trong Python. Bạn có thể nhớ từ danh sách các mô-đun phụ có trong 1 rằng nó bao gồm 2 là một mô-đun xử lý hình ảnh hữu ích.Tuy nhiên, 1 có xu hướng chỉ tập trung vào các thuật toán xử lý hình ảnh cơ bản nhất. Một mô-đun trẻ hơn, hình ảnh Scikit ( 4) chứa một số chức năng xử lý hình ảnh gần đây và phức tạp hơn.Đối với các ứng dụng trong thế giới thực, sự kết hợp của cả hai (và/hoặc các mô-đun xử lý hình ảnh bổ sung) thường là tốt nhất.
Sử dụng hình ảnh scikitĐể tải bắt đầu với hình ảnh scikit, nhập mô hình con (mô-đun cốt lõi được gọi là 4) quan tâm. Ví dụ: để tải một hình ảnh từ tệp, chúng tôi sẽ sử dụng mô hình con 6;
Tải dữ liệu với >>> imarray.shape (44, 330) >>> im.size (330, 44) 7
Ở đây lần đầu tiên tôi hiển thị một hình ảnh đơn giản được đọc từ tệp bằng hàm 8 mặc định, sau đó là một cuộc gọi thứ hai bằng cách sử dụng từ khóa 9 được đặt thành 0, khiến 8 sử dụng mô -đun 2. Điều này cho phép chúng tôi xử lý các tệp TIFF nhiều trang (nghĩa là nhiều ngăn xếp). 8 Trả về một mảng numpy gồm 2 hoặc 3 chiều, tùy thuộc vào loại tệp. Sau đó, chúng tôi có thể sử dụng bất kỳ hoạt động Numpy bình thường nào mà chúng tôi mong muốn trên mảng; ví dụ.
Hiển thị dữ liệuKhi chúng tôi xử lý các mảng numpy, chúng tôi có thể sử dụng chức năng Imshow Matplotlib, để hiển thị một hình ảnh (giống như chúng tôi đã làm trong các bài tập matplotlib);
Ngoài ra, nhóm Scikit-Image cũng đã thêm các chức năng hiển thị hình ảnh trực tiếp vào 4;
5 không tính đầy đủ như 6, mặc dù các chức năng và tính năng mới được thêm vào thường xuyên.Bắt đầu với một số xử lý dành riêng cho hình ảnh: Phân đoạn cơ bảnHình thức phân đoạn cơ bản nhất mà chúng ta có thể áp dụng là đặt ngưỡng thủ công. Điều này giống như sử dụng giao diện ngưỡng ImageJ, và định vị thủ công vị trí ngưỡng. Và đó là nó! Ngưỡng là đơn giản; Vì 7 là một mảng numpy, dòng này sẽ tạo ra một mảng boolean được lưu trữ trong biến 8, trong đó mỗi phần tử là 9 nếu giá trị của 7 tại vị trí tương ứng làboolean array stored in the variable 8, where each element is 9 if the value of 7 at the corresponding
location was <= 100, or 1 otherwise.Chúng tôi có thể xác nhận điều này bằng cách xem mảng mặt nạ mới của chúng tôi; Trên thực tế, chúng ta có thể dễ dàng phủ lên mặt nạ trên hình ảnh gốc, bằng cách sử dụng đối số từ khóa 2 thành 3, đặt tính minh bạch của hình ảnh được hiển thị; 0Chúng tôi đã thực sự sử dụng bất kỳ chức năng xử lý hình ảnh nào; Hãy để khắc phục rằng bằng cách tự động xác định giá trị ngưỡng (thay vì sử dụng một số như 4 được lấy từ không khí mỏng!). Một trong những thuật toán ngưỡng hình ảnh phổ biến nhất, mà bạn có thể biết từ ImageJ, là thuật toán xác định ngưỡng tự động OTSU.Để sử dụng điều này trong 4, chúng tôi nhập mô hình con 6; 1Tại thời điểm này, 7 sẽ giữ một số duy nhất, được xác định bởi thuật toán OTSU đến ngưỡng giữa những gì nó coi là nền và giá trị cường độ pixel tiền cảnh.Sau đó chúng tôi sẽ tạo ra một mặt nạ theo cách tương tự như trước đây; 2và có thể tiếp tục thực hiện các hoạt động xử lý hình ảnh tiếp theo của chúng tôi. Phân tích thành phần được kết nối: >>> Image.fromarray(imarray)
|