Nếu đây là kết quả làm mịn bạn sau đó, nó có thể thu được bằng cách thực hiện một Gaussian blur, tiếp theo là một ngưỡng. I E. sử dụng cvSmooth
với CV_GAUSSIAN
làm người bán hàng. Tiếp theo là cvThreshold
.
Nếu bạn muốn chuyển tiếp mượt mà hơn là đập (như this), bạn có thể nhận điều đó với các mức điều chỉnh (ánh xạ lại phạm vi màu để bạn duy trì một số chuyển tiếp cạnh).
cập nhật Để giải thích cách có được cạnh mịn (chống răng cưa) trên móng tay, hãy xem xét những gì mà bản vẽ làm. Về cơ bản nó xử lý từng pixel trong hình ảnh, mỗi lần một pixel. Nếu giá trị pixel thấp hơn ngưỡng, nó được đặt thành màu đen (0), nếu không được đặt thành màu trắng (255).
Toán tử ngưỡng do đó rất đơn giản, tuy nhiên, có thể sử dụng bất kỳ chức năng ánh xạ chung nào khác. Về cơ bản, đó là hàm f(i)
, trong đó i
là giá trị pixel cường độ (dao động 0-255) và f(i)
là giá trị được ánh xạ. Đối với ngưỡng hàm này là đơn giản
f(i) = { 0, for i < threshold
255, for i >= threshold
một hình ảnh mịn (bằng cách sử dụng một hạt nhân cvSmooth Gaussian, mang đến cho bạn sự "mượt mà" làm mịn, nếu điều đó làm cho tinh thần) Những gì bạn có được. Vì vậy, bạn có một chuyển tiếp mềm của các giá trị trên các cạnh, từ 0 đến 255. Những gì bạn muốn làm là làm cho quá trình chuyển đổi này nhỏ hơn nhiều, để bạn có được một lợi thế tốt. Nếu bạn đi đạn đạo trên nó, bạn đi trực tiếp từ 0 đến 255, giống như cú pháp nhị phân bạn đã làm.
Bây giờ, hãy xem xét một hàm bản đồ, có thể là một dải giá trị cường độ 4 (127 + - 4) với phạm vi đầy đủ 0-255. I E.
f(i) = { 0, for i < 123
255, for i >= 131
linear mapping, for 123 <= i < 131
Và bạn nhận được kết quả mong muốn. Tôi sẽ xem xét nhanh và xem liệu nó đã được triển khai trong openCV chưa. Không nên quá khó để mã nó cho mình mặc dù.
cập nhật 2 Phiên bản đường viền sẽ là một cái gì đó như thế này:
f(i) = { 255, for i < 122
linear mapping (255->0), for 122 <= i < 126
0, for 126 <= i < 127
linear mapping (0->255), for 127 <= i < 131
255, for 131 <= i
Đi qua nó thông qua một hạt nhân Gaussian, và sau đó ngưỡng nó nên smoothen ra các cạnh. Có lẽ đây là kết quả bạn muốn? – swalog
Tôi đang giả định rằng "tiếng ồn" mà bạn đang nói đến là các thành phần tần số cao mà bạn dường như đã loại bỏ trong ví dụ thứ hai của mình. [This] (http://i.imgur.com/33GIT.png) là một đầu ra mong muốn? Nếu chỉ mong muốn đầu ra nhị phân, [ngưỡng cứng] (http://i.imgur.com/VelRg.png) sẽ là điều gần nhất. – swalog
Có, đầu ra mong muốn là để loại bỏ tiếng ồn như có đường nét mượt mà nhất có thể, tôi đã thử ngưỡng Gaussian + cũng theo gợi ý của bạn nhưng nhận được kết quả tương tự như bộ lọc trung bình. – Adrian