Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Thuật toán PCA trong vấn đề nhận dạng ảnh

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Mặc định Thuật toán PCA trong vấn đề nhận dạng ảnh

    Tớ vừa làm bài tập lớn môn xử lý ảnh,dùng PCA để nhận dạng ảnh,ảnh ở đây chỉ là các chữ số từ 0-9,các bạn muốn dùng để nhận dạng khuôn mặt hay chữ cái cũng được.

    Lý thuyết của PCA :

    Mỗi ảnh có kích thước là M*N
    Giả sử tập huấn luyện có P ảnh , khi đó ta sẽ có P vector : T1 , T2 , … , TP .
    Tìm vecto ảnh trung bình m

    So sánh các ảnh khác so với giá trị trung bình m
    A_i= Ti- m , i=1…P
    Đặc trưng của các hình chính là các vecto riêng và các trị riêng.Vì mỗi ma trận ảnh có 1 phương trình đặc trưng,nhận pi làm trị riêng.Lúc đó sẽ tồn tại vecto riêng u khác 0 sao cho
    A*u = A*pi.
    Ta cần tìm ra các vecto riêng của ma trận từ các trị riêng tìm được.
    Các vecto riêng và trị riêng từ ma trận A * A^T
    Ta thấy ma trận A có kích thước M*N × P , còn ma trận A*A^T có kích thước M*N×M*N
    Đặt L=A^T * A , tìm V là tập hợp các vector riêng của L , D là tập hợp các trị riêng tương ứng
    Ta chỉ cần lấy 1 lượng đặc trưng nhất định.Tức là chỉ cần lấy n vecto riêng là đủ để có thể lấy đặc trưng cho không gian chữ số.
    E là ma trận M*N×n , mỗi cột là một vector riêng .
    Từ tập các vecto riêng ta xây dựng 1 cơ sở trực chuẩn cho không gian chứa chữ số.Các tập vecto trực chuẩn này sẽ mô tả 1 cách tốt nhất sự phân bố các vecto trong không gian chữ số.Từ đó nhận ra đặc trưng riêng biệt của mỗi chữ số.

    Bước so sánh :
    Chiếu hình cần tìm lên trên không gian chữ số.Để làm được điều này cần có cơ sở trực chuẩn đã lấy được từ trên:
    Lý thuyết :
    Cho V là một không gian có tích vô hướng hữu hạn chiều và W là một không gian con của V . Giả sử W có một cơ sở trực chuần là {u_1, … , u_Q} .

    TIếp tục chiếu ảnh kiểm tra lên từng ảnh trong tập huấn luyện
    Khoảng cách gần nhất giữa 2 kết quả trên chính là 2 ảnh giống nhau nhất

    Xây dựng bằng mã giả :
    C Code:
    1. while(!end_of_path) // vào thư mục traning
    2.     A = openfile(file_current,r) // lấy tên file hiện tại
    3.     file_next(); // trỏ vào file tiếp
    4.    
    5.     // Bien tat ca anh kich thuoc MxN thanh vector cot M*Nx1
    6.     ANH[m,n] = chuyen_anh_thanh_matran(A); // chuyển từ ảnh có kích thước mxn thành ma trận mxn
    7.     ANH[m,n] = chuyen_thanh_anh_gray_scarle(); // chuyển thành ảnh trắng đen
    8.     T[M,N,P] = T[size_witch,size_height,A];
    9.  
    10.     //T là một ma trận có kích thước M*NxP chứa tất cả ảnh trong csdl , mỗi ảnh là
    11.     // một vecto cột.
    12.    
    13.     // tìm m là giá trị trung bình của các ảnh
    14.     // Sau đó lấy từng bức ảnh trong T trừ đi bức ảnh trung bình ta được ma trận A có
    15.     // kich thuoc M*NxP
    16.    
    17.     m = trungbinh(T,2);
    18.     soanh = size(T,2);
    19.        
    20.     // tính độ lệch của mỗi hình huấn luyện với ảnh trung bình
    21.     A = [];  
    22.     for i = 1 : soanh
    23.         temp = (T(size(A),i)) - m
    24.         A[M*N*P] = temp;
    25.     end
    26.    
    27.     // Ta tìm Eigenvecto(các vecto riêng ) của ma trận A*A' , nhưng ma
    28.     // trận A*A' có kích thước là M*NxM*N quá lớn , ta sẽ tìm các vecto riêng
    29.     // của ma trận A'*A có kích thước PxP
    30.    
    31.     L = A'*A;
    32.    [V D] = eigen(L); // hàm eigen để lấy các vecto riêng và trị riêng từ L
    33.    //V chứa các vecto riêng còn D chứa các trị riêng
    34.    //vecto rieng V(M*N,i) ung voi tri rieng D(i,i)
    35.    D1=sort_giamdan(D); // sắp xếp giảm dần tập các vecto riêng
    36.    
    37.    D1=D1[size(D)-20]; // lấy ra 20 vecto riêng : lấy bao nhiêu tùy ý,nhưng 20 có lẽ là
    38.    //đủ các đặc trưng cần thiết
    39.    
    40.    D1 chính là tập 20 vecto riêng
    41.    
    42.    //nhu da noi o tren , sau khi co cac vector rieng cua ma tran A'*A , ta tim
    43.     //cac vector rieng cua ma tran A*A' bang cach lay ma tran A nhan voi D1
    44.    
    45.     //Từ đó ta có tập các vecto riêng đặc trưng cho không gian ma trận A*A' là E
    46.     E = A * D1;
    47.    
    48.     //Nhưng E chỉ là 1 tập các vecto trực giao,nên ta cần chuẩn hóa nó để tạo thành
    49.     //1 cơ sở trực chuẩn,phục vụ cho phép chiếu về sau.
    50.    
    51.     E=chuyen_ve_co_so_truc_chuan(E);
    52.  
    53. endwhile
    54.  
    55. //thực hiện các phép chiếu :
    56. // với
    57. //E là tập các vecto trực chuẩn,A là độ lệch giữa ảnh đang xét và m(giá trị trung bình)
    58. //tìm tọa độ của các ảnh huấn luyện khi chiếu lên không gian chữ số
    59.  
    60. sovector = size(E);//so vector rieng trong E ( la so cot )
    61. for k=1 to tongsoanh do:
    62.     for i = 1 to sovector do :
    63.         I += E*A(i); //tọa độ hình chiếu I của bức ảnh thứ k
    64.     endfor
    65. toado[k] = I; // lưu các tọa độ hình chiếu của các bức ảnh lên không gian chữ số
    66. endfor
    67.    
    68. // tìm tọa độ của ảnh cần kiểm tra chiếu lên không gian chữ số
    69. //làm tượng tự nnhư với các ảnh trong tập huấn luyện.
    70.  
    71. for i = 1 to sovector do :
    72.     toado_anh_kiemtra += E*A(i); //tọa độ hình chiếu của ảnh kiểm tra
    73. endfor
    74.  
    75. //so sánh khoảng cách giữa tọa độ ảnh kiểm tra và các ảnh huấn luyện
    76. // các hình chiếu lên không gian chữ số là các vecto,vì thế để tính khoảng cách
    77. //ta sẽ dùng công thức tính khoảng cách euclipse
    78. // khoảng cách từng hình 1 sẽ lưu vào mảng khoangcach
    79.  
    80. khoangcach = [];
    81. for k = 1 to tongsoanh do :
    82.     for i = 1 to sovector do :
    83.         q = toado(m,n,i);
    84.         h = (lay_truchuan(toado_anh_kiemtra - q ) )^2;
    85.     end
    86. khoangcach[k] = h;
    87.  
    88. // sắp xếp trong mảng khoangcach -> có thể dùng knn để quyết định
    89.  
    90. min = sort_tangdan(khoangcach[],tosoanh);    
    91.  
    92. //min là vị trí của bức ảnh trong tập huấn luyện có tọa độ chiếu so với tọa độ chiếu của ảnh kiểm tra
    93. //nhỏ nhất
    94. //từ đó có thể đưa ra quyết định

    Source đính kèm viết trên VS2008 bằng C++ WinAPI
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi lttq : 19-04-2012 lúc 02:59 PM.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  2. #2
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà nội
    Bài viết
    210

    xin chào !
    với thuật toán PCA bạn có xử lí đc vấn đề này chưa :
    - Khi trong data.xml chưa có khuôn mặt nào thì không tìm thấy ( chắc chắn)
    - Khi trong data.xml có 1 hoặc vài khuôn mặt mà đưa 1 khuôn mặt không có trong cơ sở dữ liệu thì nó nhận ra khuôn mặt khác ( do cái ecludience... distance gì gì đó nó tính khoảng cách nhỏ nhất để đưa ra khuôn mặt )
    Được thầy giáo MFC giao cho cái này mà đành pải bỏ vì vấn đề này , search không ra nổi :|
    Quá yêu em khiến em xem
    Đó như là sơ hở
    Em điểu khiển và biến tôi thành 1 thằng khở

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi prt_awm Xem bài viết
    xin chào !
    với thuật toán PCA bạn có xử lí đc vấn đề này chưa :
    - Khi trong data.xml chưa có khuôn mặt nào thì không tìm thấy ( chắc chắn)
    - Khi trong data.xml có 1 hoặc vài khuôn mặt mà đưa 1 khuôn mặt không có trong cơ sở dữ liệu thì nó nhận ra khuôn mặt khác ( do cái ecludience... distance gì gì đó nó tính khoảng cách nhỏ nhất để đưa ra khuôn mặt )
    Được thầy giáo MFC giao cho cái này mà đành pải bỏ vì vấn đề này , search không ra nổi :|
    Mình không dùng file xml mà dùng bộ csdl là ảnh thật(ảnh để trainning).
    Còn về vấn đề của bạn trong code đã giải quyết đầy đủ.Khi khoảng cách euclidean vượt quá ngưỡng beta nào đó thì ảnh không có trong bộ csdl.Điều này là chắc chắn vì khi bạn đưa 1 ảnh khác vào thì hình chiếu của nó so với các ảnh trong csdl là rất khác.

    Chỉ số beta là do thực nghiệm,không có giá trị cụ thể.Bạn test 1 số ảnh khác nhau,sau đó đưa ra ngưỡng beta đó
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    71

    Cảm ơn bạn về đề tài này. bạn cho mình hỏi trong kỹ thuật nhận dạng ảnh ta còn có những kỹ thuật nào khác nữa không bạn. mình có thể tham khảo các nguyên cứu về nhận dạng hình ảnh ở đâu vậy?
    Ánh trăng mờ trên dãy núi xa xa
    Cao thủ cô đợn bỗng ko thấy bóng
    Tình cảm chân thành biết ngỏ cùng ai
    Sống chết bên nhau trên bước đường dài
    Gặp việc lớn ta sãn sàng xông pha đón nhận.

  5. #5
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi pdtg50 Xem bài viết
    Cảm ơn bạn về đề tài này. bạn cho mình hỏi trong kỹ thuật nhận dạng ảnh ta còn có những kỹ thuật nào khác nữa không bạn. mình có thể tham khảo các nguyên cứu về nhận dạng hình ảnh ở đâu vậy?
    Nhận dạng ảnh có rất nhiều kỹ thuật để nhận dạng.Trong 1 topic khác của mình ở đây có trình bày cách nhận dạng khác dựa vào đường đi của nét chữ(stroked base).Ngoài các phương pháp kinh điển như dùng mạng neural,mô hình markov ẩn thì còn các phương pháp như dùng svm,thậm chí có thể dùng mạng bayes để đưa ra quyết định cũng được(bạn xem công thức trang 898 - digital image processing).

    Tóm lại,bạn nên có chút kiến thức về image processing và learning machine rồi hãy làm.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    71

    Mặc định Thuật toán PCA trong vấn đề nhận dạng ảnh

    mình cảm ơn bạn. mình sẽ theo hướng dẫn của bạn.
    Ánh trăng mờ trên dãy núi xa xa
    Cao thủ cô đợn bỗng ko thấy bóng
    Tình cảm chân thành biết ngỏ cùng ai
    Sống chết bên nhau trên bước đường dài
    Gặp việc lớn ta sãn sàng xông pha đón nhận.

  7. #7
    Ngày gia nhập
    06 2008
    Bài viết
    5

    Một bài viết hay va hữu ích,
    mình cũng đang làm về cái này
    cảm ơn bạn nhé. Bạn có tài liệu nào nói rõ về thuật toán PCA không? post cho mình coi với. Mình làm bằng C#

  8. #8
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi tbv Xem bài viết
    Một bài viết hay va hữu ích,
    mình cũng đang làm về cái này
    cảm ơn bạn nhé. Bạn có tài liệu nào nói rõ về thuật toán PCA không? post cho mình coi với. Mình làm bằng C#
    http://it08cl2.net/mybb/thread-thuat-toan-pca-va-knn-trong-van-de-trich-loc-va-phan-loai-cac-d%E1%BA%B7c-trung-cua-chu-so

    Làm bằng NN gì cũng vậy thội.Hiểu được giải thuật thì code được hết.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  9. #9
    Ngày gia nhập
    05 2012
    Bài viết
    1

    Mặc định File resouce.h

    anh cho em hoi file resouce.h của anh là thế nào vậy anh

  10. #10
    Ngày gia nhập
    02 2012
    Bài viết
    26

    chủ pic còn đây ko nhỉ? mình đang gặp vấn đề về so sánh ảnh tương đồng, có bạn nào biết về code java đề tìm ảnh tương đồng ko nhỉ?

Các đề tài tương tự

  1. Thuật toán tìm bội chung nhỏ nhất trong lập trình C++?
    Gửi bởi dungtimtoinua2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 30-06-2018, 11:16 AM
  2. mạng neuron trong kỹ thuật nhận dạng đối tượng
    Gửi bởi vietdungiitb trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 22-12-2012, 01:46 AM
  3. Giảm thuế thu nhập doanh nghiệp năm 2011, miễn thuế thu nhập cá nhân đến hết năm 2012
    Gửi bởi tailanh8423 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 28-05-2012, 01:10 PM
  4. thuật toán sắp xếp các hình chữ nhật nhỏ vào trong 1 hình chữ nhật to cho trước
    Gửi bởi shikane001 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 04-08-2011, 10:18 PM
  5. Thuật toán c# tìm đường đi ngắn nhất trong đồ thị ( toán rời rạc )
    Gửi bởi cuongcntt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 16-06-2011, 10:41 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn