Làm thế nào tôi có thể loại bỏ bóng từ một hình ảnh?


17

Tôi có hình ảnh này

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

Tôi muốn xóa bóng khỏi hình ảnh. Tôi biết rất nhiều phương pháp khác nhau như các hoạt động hình thái nhất định đã được sử dụng để loại bỏ bóng:

Tôi đã tạo mặt nạ này cho cùng một hình ảnh

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

Có một số phương pháp khác tôi có thể thử sử dụng mặt nạ này mà tôi đã tạo ra?

CHỈNH SỬA :

hình ảnh đầu vào và mặt nạ có cùng kích thước theo yêu cầu:

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

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

EDIT 2: tôi đã tạo ra một hình ảnh bất biến 1D tuy nhiên nó không hoàn hảo

  I = imread('shadow.jpg');
       J = im2double(I);

      R = J(:,:,1);
      G = J(:,:,2);
      B = J(:,:,3);

     [len,wid] = size(R);

     % Generation of 2-D Log Chromaticity Image.
     for i = 1:len
        for j = 1:wid
           if ((R(i,j)*G(i,j)*B(i,j))~= 0)
              c1(i,j) = R(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
              c2(i,j) = G(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
              c3(i,j) = B(i,j)/((R(i,j)*G(i,j)*B(i,j))^(1/3));
           else
              c1(i,j) = 1;
              c2(i,j) = 1;
              c3(i,j) = 1;
        end
    end
end

rho1 = mat2gray(log(c1));
rho2 = mat2gray(log(c2));
rho3 = mat2gray(log(c3));

X1 = mat2gray(rho1*1/(sqrt(2)) - rho2*1/(sqrt(2)));                                         %(1/sqrt(2); -1/sqrt(2); 0)
X2 = mat2gray(rho1*1/(sqrt(6)) + rho2*1/(sqrt(6)) - rho3*2/(sqrt(6)));   %(1/sqrt(6); 1/sqrt(6); -2/sqrt(6))

theta = 120;

InvariantImage = cos(theta*pi/180)*X1 + sin(theta*pi/180)*X2;
imagesc(InvariantImage); colormap(gray)

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

Không thể hiểu những gì tôi đang làm sai ở đây xin vui lòng giúp đỡ?


Câu hỏi hay! Bạn đã thử tăng độ sáng trong vùng mặt nạ chưa?
Dima

5
Kiểm tra câu trả lời của tôi ở đây: dsp.stackexchange.com/questions/454/ từ
datageist

Nói một cách đơn giản, độ phản xạ của hai bề mặt khác nhau là khác nhau, cả về mặt tuyệt đối và cách chúng phản xạ ánh sáng trực tiếp so với ánh sáng gián tiếp. Vì vậy, họ phản ứng khác nhau khi ở trong một cái bóng và cần các công thức khác nhau để hủy bỏ bóng tối.
Daniel R Hicks

Có các phương pháp khác như phát hiện cạnh bằng đạo hàm thứ hai, sử dụng toán tử gradient và toán tử Laplacian.

Câu trả lời:


11

Có hàng tá ấn phẩm liên quan đến phát hiện bóng, tạo mặt nạ bóng và thực sự một số ấn phẩm thực sự loại bỏ bóng - chẳng hạn như những ấn phẩm được đề cập trong các bài viết trước. Tôi có thể thêm một số vào danh sách, nếu cần. Tuy nhiên, vấn đề là IMHO còn lâu mới được giải quyết. Để bắt đầu nhanh, được đưa ra một mặt nạ bóng, tôi đề nghị (và đã thử trong quá khứ) hai cách tiếp cận sau. Chúng chắc chắn làm giảm bóng - không phải lúc nào cũng liền mạch và tôi chắc chắn có những ấn phẩm (không phải do tôi) xử lý loại bỏ bóng theo những cách tương tự.

  • Kỹ thuật thao tác tên miền Gradient như được mô tả ở đây (Mã C và Matlab được cung cấp): http://www.umiacs.umd.edu/~aagrawal/ICCV2007Cference/index.html Phương pháp tích hợp gradient có thể được sử dụng cho một số xử lý hình ảnh các vấn đề, xem các slide / trình bày để biết thêm ví dụ.

    Ý tưởng chung:

    1. Tính toán các dẫn xuất không gian (hình ảnh gradient) cho tất cả các kênh màu.
    2. Sử dụng các ranh giới bóng từ mặt nạ bóng để tạo mặt nạ trọng lượng gần bằng 0 trên các ranh giới bóng và tăng lên một trong một vùng lân cận được chỉ định dọc theo cạnh bóng, tức là trực giao với một điểm cạnh nhất định.
    3. Nhân mặt nạ trọng lượng từ (2.) với tất cả các hình ảnh độ dốc để giảm / làm ẩm các ranh giới / cạnh của bóng.
    4. Tích hợp các hình ảnh độ dốc bằng cách sử dụng mã từ liên kết trên.
    5. Đối với hình ảnh RGB, theo kinh nghiệm của tôi, tính trung bình của các kênh riêng biệt của hình ảnh gốc và chia tỷ lệ hình ảnh tích hợp để khớp với các giá trị này để ngăn chặn các tạo phẩm màu "buồn cười".
  • Thao tác độ sáng trong miền hình ảnh gốc.

    1. Sử dụng mặt nạ bóng để tạo mặt nạ trọng lượng là một vùng bóng bên ngoài, có sự chuyển tiếp mượt mà (lên trên) qua ranh giới bóng tối và lớn hơn một yếu tố tỷ lệ trong các vùng bóng tối. Như đã đề xuất trong bài trước, yếu tố tỷ lệ có thể được ước tính từ khu vực ngay lập tức xung quanh khu vực bóng tối bằng cách sử dụng độ sáng trung bình cùng với độ sáng trung bình của vùng bóng tối.
    2. Nhân các hình ảnh gốc (trên mỗi kênh) với mặt nạ trọng lượng, có thể cắt.

Tôi cũng đã thử sử dụng các mô hình màu khác nhau, ví dụ HSV, thể hiện độ chói hoặc độ sáng trực tiếp, sau đó có thể được sửa đổi độc lập với màu (màu sắc / độ bão hòa). Điều này hoạt động cơ bản giống như thao tác độ sáng, tức là tạo ra mặt nạ trọng lượng trơn tru và nhân nó với kênh độ chói. Có thể hai cách tiếp cận, tức là tích hợp độ dốc và thao tác độ sáng, có thể được kết hợp một cách thông minh, nhưng ai đó có lẽ cũng đã thử điều đó trước đây.

Hy vọng rằng sẽ giúp, loại trân trọng, Derik.


2
Liên kết dường như đã chết, đây là một phiên bản lưu trữ .
Delgan

9

Tôi đã nhìn thấy hình ảnh này trước đây. Trong thực tế, đây là trong bài viết về chủ đề mà bạn đang tìm cách giải quyết. Theo dõi với một bài báo khác từ cùng một nhóm nghiên cứu tại Đại học Simon Fraser. Cả hai điều này sẽ cung cấp cho bạn một giới thiệu tốt về vấn đề giải quyết màu sắc cho ánh sáng bất biến.


vâng tôi biết điều đó nhưng đã cố gắng thử một phương pháp khác cho cùng một vấn đề
vini

@vini: Nếu bạn đã đọc rằng bạn nên biết những gì bạn đang chống lại --- các hoạt động hình thái đơn giản sẽ không cắt giảm. Bạn đã đọc và thử những gì khác? Tôi có thể đề nghị các giấy tờ khác nếu cần.
Emre

@Emre tôi đang cố gắng thay đổi độ sáng để hiệu ứng của bóng giảm đi nhưng không thành công lắm .. Có thể sử dụng bản đồ cạnh để che giấu bóng này bằng cách nào đó không .. (matlab) để loại bỏ bóng tối
vini

5
@vini: Vấn đề này nằm ngoài các giải pháp một lớp. Các bài báo được liên kết (và cũng có những bài khác) đã giải quyết vấn đề trong hầu hết các trường hợp, vì vậy nếu bạn muốn làm điều gì đó mới, bạn sẽ phải tìm ra điểm yếu của họ, và điều đó có nghĩa là hiểu rõ về chúng, vì vậy tôi khuyên bạn nên đọc lại chúng cẩn thận Họ thường đề cập đến các vấn đề trong phần Thảo luận và Kết luận. Cách tiếp cận chiếu sáng bất biến log-chromaticity dường như hứa hẹn nhất đối với tôi ...
Emre

4

Có một số phương pháp nói về phát hiện Shadow về cơ bản hoạt động dựa trên nền đã biết. Không có khái niệm tuyệt đối về bóng là gì chỉ bằng cách nhìn vào màu pixel. Tuy nhiên, bạn cần xác định bóng mà không cần tham khảo.

Mặc dù vấn đề này rất khó, đây là một giải pháp tầm thường - mặc dù dễ dàng đây có thể không phải là giải pháp tốt nhất, tuy nhiên nó có thể giúp bạn có được một số quan điểm.

Hãy xem xét các thành phần hình ảnh trong miền HSL

Huếlà Thành phần Huế,
Độ bão hòalà Thành phần bão hòa và Nhẹ nhànglà Thành phần Ánh sáng

Người ta biết rằng Lightness tương ứng chặt chẽ với màu xám tương đương với hình ảnh và về cơ bản là Shadow

một khu vực bán trong suốt trong đó cảnh quay lại trải qua một sự suy giảm cục bộ.

Từ đây .

Do đó, nó là một lớp phủ làm giảm độ phản xạ cho biết bóng tối mà bạn có thể xác định giống nhau trong phần màu xám của hình ảnh - nhưng bạn sẽ thấy nó tương tác ít hơn nhiều trong các phần màu (Huế và ở phần bão hòa đến phần nào).

Bây giờ, ở đây, tôi có thể tạo ra hai hình ảnh - nơi

  1. Trong hình ảnh đầu tiên này, chúng tôi đã loại bỏ thành phần Lightness (thay thế bằng giá trị trung bình cố định)
    nhập mô tả hình ảnh ở đây

  2. Trong hình ảnh thứ hai, chúng tôi đã loại bỏ thành phần Saturation theo cùng một cách Saturation bị loại bỏ

Chúng ta có thể thấy rằng ngay cả khi độ sáng được bảo toàn nhưng độ bão hòa bị loại bỏ, thông tin quan trọng về bóng vẫn còn nguyên vẹn - khi mà khi chúng ta loại bỏ độ sáng, thông tin bóng bị giảm đáng kể. Mặc dù điều này không hoàn hảo, nhưng nó tạo ra một tính năng chính cho phép bạn phân biệt đâu là bóng thực sự với nền.

Dựa trên điều này, bạn có thể coi hình ảnh "Lightness remove" làm nền và hình khác là hình ảnh sự cố và phân đoạn hình ảnh dựa trên hai thông tin này; Vì vậy, ở các khu vực nơi bóng không đóng vai trò chính, sự khác biệt có thể ít hơn nhiều, khi mà bóng tồn tại, phân đoạn đó sẽ hiển thị lỗi cao.

Ngoài ra, bạn chỉ có thể áp dụng phân đoạn độc lập (chẳng hạn như phát triển vùng) trên cả hai hình ảnh. Hình ảnh bị loại bỏ bão hòa sẽ có thêm phân đoạn không tồn tại trong hình ảnh bị loại bỏ độ sáng, không có gì ngoài phân đoạn bóng.

Lưu ý: Bạn có thể phân biệt hình ảnh loại bỏ ánh sáng HSL với hình ảnh gốc. Cũng thử những điều tương tự với không gian màu HSV cũng như YCbCr.


2

Bạn có thể lấy một biểu đồ của khu vực bị che (bóng) và áp dụng biến đổi màu tuyến tính để biểu đồ của khu vực bị che và phần còn lại của hình ảnh được khớp.

Tôi cho rằng hệ số tỷ lệ trong biến đổi sẽ không đáng kể, chỉ cần thay đổi độ sáng là cần thiết, do đó bạn chỉ cần lấy độ sáng trung bình của hai phân đoạn (bóng, sorroundings) và áp dụng chênh lệch.

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.