Phát hiện bề mặt


9

Làm thế nào một phân đoạn diện tích lớn của màu xám (từ trắng đến đen) từ một hình ảnh? (Nếu bạn biết điều này trong opencv, bạn có thể trả lời bằng cách nói những gì bạn sẽ làm trong opencv). Ví dụ cho hình ảnh này:

nhập mô tả hình ảnh ở đây

Bạn thấy rằng đây là một khu vực rộng lớn của màu xám và nó có thể phân biệt rõ ràng với phần còn lại. Làm thế nào bạn có thể phân đoạn này nếu khu vực này có thể có bất kỳ màu xám nào và nó phải hoạt động trong thời gian thực.

Thx trước.


Tôi thấy một số khu vực màu xám có thể phân biệt rõ ràng. Bạn có thể hiển thị kết quả mong muốn của bạn?
Tiến sĩ belisarius

kết quả mong muốn của tôi là tọa độ của góc trên cùng bên phải và bên trái và tọa độ của góc dưới cùng bên trái của hình chữ nhật màu xám ở giữa
Olivier_s_j

Bạn có thể cho chúng tôi biết bất cứ điều gì khác về môi trường và phương sai tiềm năng trong các hình ảnh bạn sẽ cần xử lý không? Mục tiêu sẽ luôn ở gần giữa hình ảnh chứ? Sẽ có hình chữ nhật màu xám khác, có thể có cùng kích thước? Điều gì nếu chúng xuất hiện dưới cùng một màu xám? Có bất cứ điều gì khác chúng ta có thể sử dụng để xác định nó? Nó sẽ luôn có hình chữ "T" nhỏ ở trên cùng chứ?
justis

Xin chào, Mục tiêu sẽ không luôn ở gần giữa hình ảnh. Mục tiêu sẽ luôn là một số loại hình chữ nhật. (Nó cũng có thể chỉ là một bức tường). Nếu có nhiều hình chữ nhật thì chúng cũng nên được phát hiện, nhưng chúng phải lớn. Các khu vực nhỏ có thể được loại bỏ. Nếu tất cả chúng đều xuất hiện dưới cùng một loại màu xám, tất cả chúng sẽ được phát hiện, nhưng khả năng điều này xảy ra là rất nhỏ. Thuộc tính thực duy nhất có thể được phát hiện là một bề mặt sẽ có cùng màu xám (nhiều hơn hoặc ít hơn) trên toàn bộ bề mặt và đó là một hình chữ nhật. Sẽ không có hình dạng chữ T nhỏ hàng đầu mỗi lần
Olivier_s_j

Câu trả lời:


9

Bạn sẽ có được một phân đoạn hợp lý của khu vực màu xám bằng cách sử dụng Thuật toán đầu nguồn hoặc cắt biểu đồ. Đầu nguồn có sẵn trong opencv nhưng cắt đồ thị chưa được. (BTW Đây có phải là bản đồ độ sâu từ Kinect không?)


1
Hàm lưu vực trong opencv yêu cầu hình ảnh 3 kênh 8 bit làm đầu vào. Bản đồ độ sâu của tôi là hình ảnh 8 bit 1. Bất kỳ ý tưởng làm thế nào để giải quyết điều này?
Olivier_s_j

/ * nhận thuộc tính hình ảnh / width = src-> width; chiều cao = src-> chiều cao; / tạo hình ảnh mới cho phiên bản thang độ xám * / IplImage * dst = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
hải quân

Một câu hỏi khác, tôi vừa có chức năng đầu nguồn làm việc trong một hình ảnh khác (chỉ là một ví dụ từ opencv). Nhưng họ bắt đầu với một hình ảnh màu và một hình ảnh nhị phân. Tôi chỉ có 1 hình ảnh ... hình ảnh grascale. Bất kỳ ý tưởng về những gì các mặt nạ nên được (biến đầu vào thứ hai)?
Olivier_s_j

4

Trong Mathematica bạn có thể làm một cái gì đó như:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

nhập mô tả hình ảnh ở đây

Có lẽ bạn có thể dịch mã này sang bất kỳ lib xử lý hình ảnh.


Xin chào, có vẻ tốt. Nhưng tôi không có toán học. Nhưng tôi đoán bạn đã sử dụng ngưỡng dựa trên thang độ xám của hình ảnh này? Có lẽ bạn có thể cung cấp một chút thông tin với mã của bạn? Thx
Olivier_s_j

1
@Ojt Đối với mỗi lệnh bạn có thể đọc " reference.wolfram.com/mathematica/ref/xxx.html " cho một mô tả. Ví dụ reference.wolfram.com/mathematica/ref/...
Tiến sĩ Belisarius

Ok tôi đã làm như bạn đề nghị. Nhưng có vẻ như bạn đang sử dụng Binarize để đạt ngưỡng ở một giá trị nhất định. Điều này là không thể trong trường hợp của tôi. Vì các khu vực rộng lớn có thể có các sắc thái khác nhau của màu xám. (Ví dụ, bề mặt giữa có thể rất nhẹ). Và sau đó ngưỡng sẽ không hoạt động.
Olivier_s_j
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.