Xử lý ảnh là một trong những lĩnh vực phát triển rất nhanh của nghành Công nghệ thông tin. Trong những năm gần đây, phần cứng máy tính và các thiết bị liên quan đã có sự tiến bộ vượt bậc về tốc độ tính toán, dung lượng chứa, khả năng xử lý v.v… và giá cả đã giảm đến mức máy tính và các thiết bị liên quan đến xử lý ảnh đã trở lên thông dụng với dầu hết mọi người trong xã hội và việc thu nhận ảnh số bằng các thiết bị cá nhân hay chuyên dụng cùng với việc đưa vào máy tính xử lý đã trở nên đơn giản. Nó được ứng dụng rộng rãi trong nhiều lĩnh vực khoa học và công nghệ. Chẳng hạn như thị giác máy tính, robot, tìm kiếm tài liệu hình ảnh, hỗ trợ chẩn đoán hình ảnh y học, thiết kế ảnh, giải trí,… xử lý ảnh só bằng máy tính đã giúp chúng ta thay đổi các cảm nhận và sử dụng máy tính, nó đã trở thành những công cụ trực quan quan trọng không thể thiếu trong đời sống hằng ngày. Trong hoàn cảnh đó, xử lý ảnh là một lĩnh vực đang được quan tâm và đã trở thành môn học chuyên nghành của sinh viên nghành công nghệ thông tin trong nhiều trường đại học trên cả nước.
Tầm quan trọng của xử lý ảnh
Xử lý ảnh nhằm cải thiện chất lượng hình ảnh để phân tích hiệu quả hơn Quá trình này giúp ngăn chặn và xử lý các biến dạng không mong muốn, đồng thời nâng cao những tính năng cần thiết cho các mục đích cụ thể Mỗi mục đích yêu cầu trích xuất các tính năng khác nhau; ví dụ, trong nhận dạng khuôn mặt, chúng ta chỉ cần tập trung vào khuôn mặt mà không cần quan tâm đến quần áo hay tóc.
Xử lý ảnh đóng vai trò quan trọng trong ngành trí tuệ nhân tạo, giúp máy tính nhận diện các đối tượng như khuôn mặt, động vật và chữ viết Ứng dụng của nó còn mở rộng sang các lĩnh vực như xử lý ảnh thiên văn và y tế Để máy tính có thể học tập hiệu quả, việc cung cấp hình ảnh phù hợp cho từng mục đích cụ thể là rất cần thiết.
Hãy xem xét hình ảnh sau:
Hình ảnh ban đầu chỉ hiển thị tháp và một vài điểm sáng, nhưng sau khi áp dụng xử lý ảnh, chúng ta có thể nhận diện rõ hình dạng của cây cối Điều này chứng tỏ tầm quan trọng của xử lý ảnh, giúp chúng ta khám phá thông tin ẩn chứa trong bức ảnh mà trước đó không thể nhìn thấy.
Bảng phân chia công việc
STT HỌ VÀ TÊN CÔNG VIỆC
1 -Thuật toán cân bằng histogram
-Thuật toán lọc Trung vị
2 -Thuật toán phát hiện biên Sobel
- Thuật toán nén ảnh SVD
3 -Thuật toán phát hiện biên Prewitt
4 -Thuật toán ảnh âm bản
-Thuật toán lọc Trung bình
TỔNG QUAN VỀ XỬ LÝ ẢNH
Xử lý ảnh là gì?
Con người tiếp nhận thông tin chủ yếu qua các giác quan, trong đó thị giác là quan trọng nhất Những năm gần đây, sự phát triển mạnh mẽ của phần cứng máy tính đã thúc đẩy công nghệ xử lý ảnh và đồ họa, mở ra nhiều ứng dụng trong đời sống Công nghệ này đóng vai trò quan trọng trong việc tương tác giữa con người và máy móc.
Hình ảnh chiếm 80% thông tin mà con người tiếp nhận, và trong vài thập kỷ qua, công nghệ máy tính đã thúc đẩy sự phát triển mạnh mẽ trong xử lý ảnh Ảnh số là hình ảnh được tạo thành từ các điểm ảnh, đại diện cho nhiều loại hình ảnh khác nhau như chân dung, X-quang, và ảnh thân nhiệt Để xử lý ảnh bằng máy tính, cần thực hiện quá trình số hóa, chuyển đổi tín hiệu liên tục thành tín hiệu rời rạc thông qua lấy mẫu và lượng tử hóa Ảnh số có hai loại: tín hiệu tương tự (analog) và tín hiệu số (digital) Điểm ảnh, hay còn gọi là pixel, được xem như cường độ sáng tại một tọa độ trong không gian của đối tượng, và khi được số hóa, ảnh thường được biểu diễn dưới dạng ma trận hai chiều, trong đó mỗi phần tử thể hiện giá trị độ sáng của điểm ảnh tại tọa độ cụ thể.
Mức xám là kết quả của việc mã hóa cường độ sáng của mỗi điểm ảnh thành giá trị số, phản ánh quá trình lượng hoá ảnh số Ảnh đen trắng sử dụng 1 bit/pixel với 2 màu, trong khi ảnh đa cấp xám sử dụng 8 bit/pixel cho 256 màu Ảnh RGB có 24 bit với 256 màu cho mỗi kênh, và ảnh 32 bit cung cấp 256 màu cho 4 kênh.
Megapixel là đơn vị đo độ phân giải của thiết bị quang, đặc biệt là trong camera số, thể hiện số điểm trong bức ảnh Giá trị megapixel được xác định bằng cách nhân chiều rộng với chiều cao của điểm ảnh.
Ví dụ ảnh có độ phân giải 1280*1024 = 1.310.720 pixel hoặc là 1.3 megapixel
Độ phân giải cao không đảm bảo chất lượng hình ảnh tốt hơn, vì chất lượng còn phụ thuộc vào nhiều yếu tố khác như thấu kính, bộ cảm biến và quy trình xử lý hình ảnh, bao gồm việc cố định màu sắc và cân bằng trắng sau khi chụp.
Hình ảnh đồ hoạ trên máy tính được chia làm 2 loại: vector và raster.
Mô hình Raster là phương pháp phổ biến nhất để biểu diễn hình ảnh hiện nay, trong đó hình ảnh được thể hiện dưới dạng ma trận các điểm ảnh Các hình ảnh này thường được thu nhận từ các thiết bị như camera hoặc scanner Tùy thuộc vào yêu cầu thực tế, mỗi điểm ảnh có thể được biểu diễn bằng một hoặc nhiều bit.
Mô hình Raster rất thuận lợi cho hiển thị và in ấn nhờ vào công nghệ phần cứng hiện đại, cung cấp thiết bị thu nhận ảnh với tốc độ nhanh và chất lượng cao Đặc biệt, trong môi trường Windows, Microsoft đã giới thiệu khuôn dạng ảnh DIB (Device Independent Bitmap) như một giải pháp trung gian, giúp tối ưu hóa quá trình hiển thị.
Một trong những hướng nghiên cứu quan trọng trong mô hình biểu diễn là kỹ thuật nén ảnh, được chia thành hai loại: nén bảo toàn và nén không bảo toàn Nén bảo toàn cho phép phục hồi toàn bộ dữ liệu ban đầu, trong khi nén không bảo toàn chỉ phục hồi trong giới hạn sai số cho phép Nhiều quy cách nén ảnh đã được đề xuất, bao gồm BMP, TIF, GIF và PCX.
Hiện nay, trên toàn cầu có hơn 50 định dạng ảnh phổ biến, trong đó bao gồm các kỹ thuật nén cho phép phục hồi dữ liệu hoàn toàn và nén với mức sai số chấp nhận được.
Biểu diễn ảnh không chỉ giúp tiết kiệm không gian lưu trữ mà còn tạo điều kiện thuận lợi cho việc hiển thị, in ấn và dễ dàng trong việc lựa chọn, sao chép, di chuyển và tìm kiếm Trong bối cảnh này, kỹ thuật biểu diễn Vector tỏ ra vượt trội hơn cả.
Trong mô hình Vector, hướng giữa các vector của các điểm ảnh lân cận được sử dụng để mã hóa và tái tạo hình ảnh gốc Ảnh vector có thể được thu nhận trực tiếp từ các thiết bị số hóa như máy quét kỹ thuật số hoặc được chuyển đổi từ ảnh Raster thông qua các phần mềm số hóa.
Công nghệ phần cứng mang lại thiết bị có tốc độ xử lý nhanh chóng và chất lượng cao cho cả đầu ra và đầu vào, tuy nhiên, nó chỉ hỗ trợ định dạng ảnh Raster.
Do vậy, những nghiên cứu về biểu diễn vector đều tập trung từ chuyển đổi ảnh sang Raster
Chiều rộng: số pixel / dòng (số byte/ số dòng)
Độ phân giải: số pixle/ inch
Số bit 8 dùng màu trực tiếp Pal: pallete
Pal[index].R, Pal[index].G, Pal[index].B
Nếu số bit/pixel > 1 ta có ảnh cấp xám, nếu = 1 ta có ảnh nhị phân với 2 cấp xám 16bit/pixel
24 bit/pixel, mỗi phần màu là một byte Độ phân giải ảnh (ppi) là số điểm ảnh có trên một đơn chiều dài của ảnh đó (inch)
Hình ảnh vector được mô tả bằng các đường cong hình học, trong khi hình ảnh raster được thể hiện qua lưới điểm, với mỗi điểm gọi là pixel và có giá trị màu riêng Một ưu điểm nổi bật của hình ảnh vector là không thay đổi chất lượng khi phóng to hoặc thu nhỏ.
Chất lượng bị giảm khi phóng to hoặc thu nhỏ ảnh
File lưu trữ có dung lượng nhỏ File có dung lương lớn hoặc rất lớn
Thường dùng cho chữ, logo, các hình minh hoạ
Thường dùng cho hình ảnh có tông màu liên tục như ảnh chụp hoặc tranh vẽ
Ví dụ một ảnh có kích thước 1 inch x 1 inch với 72ppi thì sẽ có 72x72Q84 pixels, với 300 pixel thì có 90.000 pixels
Hình ảnh có độ phân giả cao thì ảnh càng sắc nét và màu sắc càng chính xác khi đó dung lượng lưu trữ cũng sẽ tăng theo
Mô hình màu RGB (RED, GREEN, BLUE)
3 màu cơ sở là: RGB từ 3 màu cơ bản có thể tạo ra hầu hết các màu
Mô hình màu được biểu diễn bởi lập phương với trục R, G, B
Kỹ thuật xử lý ảnh là quá trình tự động biến đổi hình ảnh thành hình ảnh khác thông qua máy tính, tùy thuộc vào mục đích sử dụng của người dùng.
Quá trình xử lý ảnh là thao tác nhằm cải thiện hoặc tạo ra kết quả mong muốn từ hình ảnh gốc Kết quả cuối cùng có thể là một bức ảnh chất lượng cao hơn hoặc một kết luận cụ thể từ dữ liệu hình ảnh.
Quá trình xử lý ảnh
- Hệ thống xử lý ảnh trên máy tính là tập hợp các kỹ thuật xử lý ảnh phục vụ cho một mục đích ứng dụng nào đó
Đồ họa máy tính tập trung vào việc tổng hợp hình ảnh, trong khi xử lý ảnh chú trọng vào phân tích hình ảnh Đầu vào của đồ họa máy tính có thể là ảnh hoặc không phải ảnh, và đầu ra là một hình ảnh được tạo ra trên máy tính.
Xử lý ảnh: Đầu vào: là ảnh Đầu ra: là ảnh ‘tốt hơn’(theo nghĩa mà người sử dụng muốn) hoặc một điểm hoặc một dãy đặc điểm
Trong đồ họa máy tính, các đối tượng có thể là 2 chiều hoặc 3 chiều, trong khi xử lý ảnh không chỉ giới hạn ở dữ liệu 2 chiều hay 3 chiều mà còn có thể bao gồm nhiều chiều hơn.
- Thị giác máy: là một hệ xử lý ảnh hoàn chỉnh bao gồm thu nhận ảnh, tăng cường chất lượng ảnh, nhận dạng.
CÁC THUẬT TOÁN XỬ LÝ ẢNH
Thuật toán cân bằng histogram
Cân bằng histogram là quá trình điều chỉnh histogram để phân bố giá trị pixel không bị co cụm, mà được "kéo giãn" ra Trong thực tế, điều kiện ánh sáng ảnh hưởng đến camera, dẫn đến nhiều bức ảnh bị tối hoặc quá sáng Phương pháp cân bằng histogram là một kỹ thuật xử lý ảnh mạnh mẽ, mang lại chất lượng dữ liệu cao trong nhiều bài toán.
Mô tả thuật toán Ảnh I được gọi là cân bằng "lý tưởng" nếu với mọi mức xám g, g’ ta có h(g) h(g’)
Giả sử, ta có ảnh I ~ kích thước m × n new_level ~ số mức xám của ảnh cân bằng
TB= new mxn level ~ số điểm ảnh trung bình của mỗi mức xám của ảnh cân bằng t ( g)= ∑ i=0 g h(i)~ số điểm ảnh có mức xám ≤ g Xác định hàm f: g → f(g)
Chú ý: Ảnh sau khi thực hiện cân bằng chưa chắc đã là cân bằng "lý tưởng " -Input:Một ảnh có histogram không cân bằng
-Output: Ảnh đã được cân bằng histogram
Chương trình cài đặt : import numpy as np import cv2 as cv import matplotlib.pyplot as plt
# Đường dẫn file anh path = 'images/hist_img.jpg'
The article discusses the process of histogram equalization in image processing using Python It begins by reading an image in grayscale and computing its histogram, which tracks the frequency of pixel intensity values The `compute_hist` function generates a histogram array, while the `equal_hist` function calculates the cumulative distribution function to create a new histogram that enhances contrast The original image is then modified based on the new histogram to produce an improved version Finally, the article visualizes the original image, its histogram, the equalized image, and the new histogram using Matplotlib, emphasizing the benefits of histogram equalization in enhancing image quality.
Thuật toán âm bản
Ý tưởng: ý tưởng của thuật toán âm bản là biến đổi trắng thành đen, đen thành trắng
Với ảnh I bất kì thì ảnh L là âm bản của I khi L[i][j] = 255– I[i][j]
-Input: Một ảnh bất kì -Output: Một ảnh đã được biến đổi âm bản
# Ảnh ẫm ban from cv2 import cv2 as cv
# Đường dẫn file anh path = 'images/cat.jpg'
# Đọc anh image = cv.imread(path) cv.imshow('Ảnh goc', image) cv.waitKey(4)
# Chuyển sang anh xám (1 kểnh màu) gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRẢY)
# Chuyển sang anh ẫm ban) neg_img = 255 - gray_image cv.imshow('Ảnh am ban', neg_img) cv.waitKey() cv.destroyẢllWindows()
Thuật toán lọc trung vị
Thiết lập các điểm ảnh thành các giá trị gần giống như các điểm ảnh lân cận
Lọc trung vị là một kĩ thuật lọc phi tuyến, nó khá hiệu quả đối với hai loại nhiễu : + Nhiễu đốm (speckle noise)
+ Nhiễu muối tiêu (salt-pepper noise)
Kernel được sử dụng để quét từng điểm ảnh một cách tuần tự, thu thập các vị trí tương ứng của chúng Sau đó, các điểm ảnh này được sắp xếp theo thứ tự, và cuối cùng, điểm chính giữa được chọn làm giá trị cho điểm ảnh đang được xem xét.
Giả sử ta có ảnh I ngưìng θ cửa sổ W(P) và điểm ảnh P
Khi đó kỹ thuật lọc trung vị phụ thuộc không gian bao gồm các bước cơ bản sau:
{I(q)| q ∈ W(P)} → Med(P) + Bước 2: Gán giá trị
I(P) = I(P) khi |I(P) – Med(P)| θ -Input: Ảnh bị nhiễu
-Output: Ảnh đã được giảm nhiễu
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np def MedianFilter(image, filter_size):
# Tạo một anh trố< ng có cùng kích thước với anh đẫ[ u vào output = np.zeros(image.shape, np.uint8)
# Tạo mặt nạ kernel có cùng kích thước với filter_size filter_array = [image[0][0]] * filter_size
To apply a 3x3 filter on an image when the filter size is set to 9, iterate through the image's pixel values, excluding the borders For each pixel at position (j, i), populate a filter array with the values of the surrounding pixels: top-left (j-1, i-1), top (j, i-1), bottom-left (j+1, i-1), left (j-1, i), center (j, i), right (j+1, i), bottom-left (j-1, i+1), bottom (j, i+1), and bottom-right (j+1, i+1) This process ensures that the filter captures the local pixel neighborhood effectively.
# Sắ< p xể< p filter_array.sort()
# Lẫ< y ra điểm trung vị output[j][i] = filter_array[4]
To implement a filter of size 5x5 in image processing, iterate through the image starting from the second row and column, up to the second last row and column For each pixel, populate a filter array with values from a 5x5 region centered on the current pixel Specifically, assign values from the surrounding pixels, ensuring to cover all positions from the top-left to the bottom-right of the filter window, effectively capturing the necessary data for processing This method allows for detailed manipulation of the image based on the defined filter size.
# Sắ< p xể< p filter_array.sort()
# Lẫ< y ra điểm trung vị output[j][i] = filter_array[12] return output
# Đường dẫn file anh path = 'images/noise.png'
To read an image in grayscale, use the command `cv.imread(path, 0)`, then apply a median filter with a kernel size of 9 using `new_img = MedianFilter(image, 9)` To visualize the results, create a figure with a size of 7x7 inches, displaying the original image on the left with the title 'Original Image' and the filtered image on the right titled 'Median Filtered Image' Finally, use `plt.show()` to present the images side by side.
Thuật toán lọc trung bình
Thay thế giá trị tại mỗi điểm pixel bằng trung bình các giá trị pixel trong mặt nạ (kernel) lân cận nhằm:
Loại bỏ những pixel biến đổi lớn so với lân cận (nhiễu)
Giả sử ta có ảnh I, điểm ảnh P, cửa sổ W(P) và ngưỡng θ Khi đó kỹ thuật lọc trung bình phụ thuộc không gian bao gồm các bước cơ bản sau:
I(P) = I(P) khi |I(P) – Med(P)| θ
-Input: Ảnh bất kì bị nhiễu
-Output: Ảnh đã được giảm nhiễu
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np def MeanFilter(image, filter_size):
# create an empty array with same size as input image output = np.zeros(image.shape, np.uint8) result = 0
To apply a 3x3 filter to an image, iterate through each pixel, excluding the border pixels For each pixel, sum the values of the surrounding pixels within the filter's range After calculating the sum, divide it by the filter size to obtain the average, which is then assigned to the corresponding position in the output image Reset the result for the next pixel calculation.
To apply a filter of size 5x5 on an image, iterate through the image dimensions while ensuring to stay within the boundaries For each pixel, calculate the sum of the neighboring pixels within the filter range After summing the values, compute the average by dividing the total by the filter size, and assign this value to the corresponding pixel in the output image Finally, return the processed output image.
# Đường dẫn file anh path = 'images/noise.png'
To read an image in Python, use the command `cv.imread(path, 0)`, which loads the image in grayscale After applying a mean filter with a kernel size of 9, visualize the original and filtered images side by side using Matplotlib The original image is displayed with the title 'Original Image', while the filtered image is titled 'Mean Filtered Image', both shown in grayscale for comparison.
Thuật toán làm mờ ảnh Gaussian
Sử dụng một ma trận để giảm nhiễu và làm mờ hình ảnh
-Input: Ảnh bất kì -Output: Ảnh được giảm nhiễu và làm mờ
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np def GaussFilter(image): def kernel(a, b): return a*b/12
To create a new image with the same dimensions, initialize an output array with zeros using `np.zeros(image.shape, np.uint8)` Iterate through each pixel of the image, avoiding the borders, and for each pixel, collect the values of its neighboring pixels Apply a kernel to these values by summing them with specific weights: `[1, 2, 1, 2, 4, 2, 1, 2, 1]` Finally, clear the results list and return the processed output image.
# Đường dẫn file anh path = 'noise.jpg'
# Đọc anh image = cv.imread(path, 0)
The provided code applies a Gaussian filter to an image, enhancing its appearance It displays the original image alongside the filtered version using a grayscale color map The output consists of two subplots: the first shows the original image titled 'Original Image,' while the second presents the Gaussian-filtered image titled 'Gaussian Image.' This visualization effectively illustrates the impact of Gaussian filtering on image processing.
Thuật toán phát hiện biên sobel
Sử dụng kernel 3x3 để tính đạo hàm theo hướng ngang (Gx) và dọc (Gy) trên ảnh gốc, sau đó tính trung bình độ lớn của gradient Đạo hàm phản ánh sự thay đổi của pixel theo hướng đã chọn Cuối cùng, dựa vào cường độ gradient đã tính, các đường biên trong ảnh sẽ được làm nổi bật.
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x và y là:
Các bước tính toán của kỹ thuật Sobel
+ Bước 1: Tính I ⊗ Hx và I ⊗ Hy + Bước 2: Tính I ⊗ Hx + I ⊗ Hy-Input: Ảnh bất kì
The provided code implements the Sobel operator for edge detection in images using Python libraries such as NumPy and OpenCV The function `sobelOperator` takes an image as input, creates a copy, and calculates the gradient in both the x and y directions using convolution with Sobel kernels By iterating through each pixel (excluding the borders), it computes the gradients `gx` and `gy`, then combines them to determine the magnitude of the gradient at each pixel The resulting image highlights the edges, which can be visualized using Matplotlib.
# Đường dẫn file anh path = 'images/cat.jpg'
To read an image in grayscale, use the code `image = cv.imread(path, 0)` Next, apply the Sobel operator with `new_img = sobelOperator(image)` To display the original and processed images side by side, utilize `plt.figure(figsize=(7,7))`, followed by `plt.subplot(1,2,1)` for the original image titled 'Original Image' and `plt.subplot(1,2,2)` for the Sobel image titled 'Sobel Image' Finally, render the images using `plt.imshow()` and display them with `plt.show()`.
Thuật toán phát hiện biên Prewitt
Sử dụng kernel 3x3 của phương pháp Prewitt để nhân chập với ảnh gốc, ta tính đạo hàm theo hướng ngang (Gx) và dọc (Gy), từ đó xác định độ lớn của gradient Đạo hàm phản ánh sự thay đổi của pixel theo các hướng này Cuối cùng, dựa vào cường độ gradient đã tính, các đường biên trong ảnh sẽ được làm nổi bật.
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x và y là:
Các bước tính toán của kỹ thuật Prewitt
+ Bước 1: Tính I ⊗ Hx và I ⊗ Hy+ Bước 2: Tính I ⊗ Hx + I ⊗ Hy-Input: Ảnh bất kì
-Output: Ảnh đường biên được làm nổi bật
The provided code implements the Prewitt operator for edge detection in images using Python libraries such as NumPy and OpenCV It begins by importing the necessary libraries and defining the `prewittOperator` function, which takes an image as input Inside the function, a copy of the image is created to store the results The algorithm iterates through each pixel, excluding the borders, to calculate the gradients in the x and y directions (gx and gy) using convolution with predefined kernels Finally, the magnitude of the gradient is computed for each pixel and stored in the container, which is returned as the output image This method effectively highlights edges within the image, making it a valuable tool for image processing tasks.
# Đường dẫn file anh path = 'images/shape.jpg'
To read an image in grayscale, use the command `cv.imread(path, 0)` Next, apply the Prewitt operator to the image with `new_img = prewittOperator(image)` To visualize the results, create a figure with a size of 7x7 inches Display the original image on the left with the title 'Original Image' using `plt.subplot(1,2,1)` and `plt.imshow(image, cmap='gray')` On the right, show the processed image with the title 'Prewitt Image' using `plt.subplot(1,2,2)` and `plt.imshow(new_img, cmap='gray')` Finally, use `plt.show()` to display the images side by side.
Thuật toán giãn ảnh
So sánh với các pixel xung quanh, nếu một trong các pixel đó có giá trị 1, thì thiết lập giá trị cho pixel hiện tại cũng là 1 Phương pháp này được áp dụng cho ảnh nhị phân.
Phép "giãn nở" của X theo mẫu B là hợp của tất cả các Bx với x thuộc X
-Output: Ảnh được làm tăng kích thước đối tượng, nối đứt đoạn, lấp lỗ hổng
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np
# Phép giãn anh với kernel: [0,1,0]
The function `dilatacao` applies dilation to a binary image using OpenCV It first thresholds the image to create a binary representation, then initializes an empty image for the dilated output By iterating through each pixel, it checks the neighboring pixels; if any of them are white (255), the current pixel in the output image is set to white, otherwise, it is set to black This process enhances the features of the image by expanding the white regions The final result is a dilated binary image.
# Đường dẫn file anh path = 'images/morph.png'
To read an image in Python, use the command `image = cv.imread(path, 0)`, which loads the image in grayscale Next, apply dilation to the image with `new_img = dilatacao(image)` To visualize the results, create a figure with a size of 7x7 inches, and display the original image on the left with the title 'Original Image' and the processed image on the right with the title 'Dilated Image' Finally, use `plt.show()` to display both images side by side in gray color.
Thuật toán co ảnh
So sánh giá trị của pixel hiện tại với các pixel lân cận; nếu pixel lân cận có giá trị 1, thiết lập giá trị 1 cho pixel hiện tại, ngược lại, thiết lập giá trị 0 Phương pháp này được áp dụng cho ảnh nhị phân.
Phép "co" của X theo B là tập hợp tất cả các điểm x sao cho Bx nằm trong X.
-output:Ảnh được làm mảnh đổi tượng, xoá bỏ nhiễu và chi tiết dư thừa
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np
# Phép giãn anh với kernel: [0,1,0]
The function `dilatacao` applies a dilation operation to a binary image using OpenCV It first thresholds the image to create a binary representation, then initializes an empty array for the dilated image The algorithm iterates through each pixel, checking the neighboring pixels to determine if any are white (255) If a neighboring pixel is white, the current pixel in the dilated image is set to white; otherwise, it is set to black The function handles exceptions gracefully and returns the resulting dilated image.
# Đường dẫn file anh path = 'images/erosion.png'
To read an image in Python, use the command `image = cv.imread(path, 0)` Next, apply dilation to the image with `new_img = dilatacao(image)` To visualize the results, create a figure of size 7x7 and display the original image on the left with the title 'Original Image' using `plt.subplot(1,2,1)` and `plt.imshow(image, cmap='gray')` On the right, show the dilated image titled 'Dilated Image' with `plt.subplot(1,2,2)` and `plt.imshow(new_img, cmap='gray')` Finally, use `plt.show()` to present the images.
Thuật toán đóng mở
Ý tưởng: là phép thực hiện liên tiếp các phép co giãn
+ Phép đóng: thực hiện phép giãn sau đó thực hiện phép co + Phép mở: thực hiện phép co sau đó thực hiện phép giãn
Phép toán mở (OPEN) của X theo cấu trúc B là tập hợp các điểm của ảnh X sau khi đã co và giãn nở liên liếp theo B
Phép toán đóng (CLOSE) của X theo cấu trúc B là tập hợp các điểm của ảnh X sau khi đã giãn nở và co liên tiếp theo B
Ảnh trơn biên đối tượng giúp loại bỏ các yếu tố không mong muốn như eo hẹp và thành phần lồi mỏng, đồng thời xoá nhiễu và làm mất khuyết điểm, tạo ra hình ảnh hoàn hảo với viền được lấp đầy một cách tự nhiên.
Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt from erosion import erosao from dilation import dilatacao
# Phép đóng thực hiện bằng cách thực hiện phép giãn(DILẢTION) sau đó thực hiện phép co(EROSION)
# Phép mở ngược lại với phép đóng thực hiện phép co(EROSION) sau đó thực hiện phép giãn(DILẢTION)
# Đường dẫn file anh path = 'images/erosion.png'
To read an image in grayscale, use the command `cv.imread(path, 0)` The image undergoes morphological transformations, where closing is applied through erosion followed by dilation, and opening is achieved via dilation followed by erosion A figure is created with a size of 7x7, displaying three subplots: the original image titled 'Original Image', the closed image titled 'Closed Image', and the opened image titled 'Opened Image' Each subplot is presented without axes, and the images are shown in grayscale using the `plt.imshow` function, culminating in the visualization of the processed images with `plt.show()`.
Thuật toán nén ảnh SVD (Singular Value Decomposition)
Biến đổi ma trận ảnh thành các ma trận nhỏ hơn từ đó giảm kích thước ảnh
Một ma trận Am×n bất kỳ đều có thể phân tích thành dạng:
Am×n=Um×mΣm×n(Vn×n) T = U r Σ r (V r ) T Trong đó, U,V là các ma trận trực giao, Σ là ma trận đường chéo không vuông với các phần tử trên đường chéo σ1≥σ2≥⋯≥σr≥0=0=⋯
Hạng của ma trận A được ký hiệu là r Mặc dù ma trận Σ không phải là ma trận vuông, nhưng chúng ta vẫn có thể xem nó như một ma trận chéo nếu các yếu tố khác của nó chỉ xuất hiện tại các vị trí trên đường chéo, tức là tại những vị trí có chỉ số hàng và chỉ số cột trùng nhau.
Số lượng các phần tử khác 0 trong Σ chính là rank của ma trận A.
Chương trình cài đặt: import cv2 as cv import numpy as np import matplotlib.pyplot as plt def svd(img, n): img = np.mean(img, 2)
S = np.zeros(np.shape(img)) for i in range(0, n):
S[i,i] = s[i] recon_img = U @ S @ V return recon_img img = cv.imread('cat.jpg')
The code demonstrates image compression using Singular Value Decomposition (SVD) with a compression factor of n = 10 It displays the original image alongside the reconstructed image after compression, highlighting the effects of the compression process The original image is shown on the left, while the compressed version is presented on the right, allowing for a visual comparison of the two The title "Image Compression" emphasizes the focus of the demonstration.