1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        OpenCV圖像拼接改進算法之完美拼接

        共 3142字,需瀏覽 7分鐘

         ·

        2022-12-30 21:48

        點擊上方小白學(xué)視覺”,選擇加"星標"或“置頂

        重磅干貨,第一時間送達

        前言概述

        之前寫了兩篇文章分別是圖像單應(yīng)性矩陣變換與圖像拼接,圖像拼接中使用單應(yīng)性矩陣實現(xiàn)圖像特征對齊,從而為圖像拼接特別是無縫拼接打下基礎(chǔ),看一下上一篇我的圖像拼接效果如下:

        經(jīng)過分析發(fā)現(xiàn):效果不好的原因是像素疊加的時候沒有考慮左右兩側(cè)圖像的位置信息,直接通過手動指定了融合區(qū)域跟閾值,而不是根據(jù)圖像實際位置由圖像生成mask層,根據(jù)mask層動態(tài)生成融合圖像重疊區(qū)域的閾值,如此可以解決融合不夠自然或者看上去拼接效果不好。最終改進之后的兩張圖像拼接效果如下:

        是不是一個完美的無縫圖像拼接我說了不算,大家說了算,歡迎留言反饋!

        改進思路

        想要完美的實現(xiàn)無縫拼接,有兩個關(guān)鍵技術(shù)點:

        • 特征提取與對齊階段要取得配準對其好的單應(yīng)性矩陣H,要用好的特征提取,千萬別ORB。

        • 拼接階段融合,要有好的圖像融合算法支持,別提金字塔融合,速度太感人了,所以最好一層搞定,間隔權(quán)重采樣是個好方法。

        之前的實現(xiàn)中圖像對齊跟配準做的不錯,就是最后的拼接效果不好,所以要改進圖像融合,實現(xiàn)無縫融合。這里我觀察了右側(cè)圖像透視變換的結(jié)果,發(fā)現(xiàn)一般都是一個不規(guī)則的圖像,以我老家房屋的圖像為例:對齊+透視變換之后如下:


        生成的mask圖像如下:

        如果想要完美的融合,就不能隨便制定區(qū)域融合,而是根據(jù)右側(cè)透視變換之后的圖像,來生成每一行有多少列是跟左側(cè)圖像重疊的,然后自動計算重疊區(qū)域大小,計算間隔值,完成最終mask權(quán)重圖像生成,如下圖:

        代碼實現(xiàn)與步驟

        我是一個比較懶的人,代碼已經(jīng)有注釋了,這里我就不過多解釋,只簡單說一下代碼執(zhí)行流程。

        1. 首先是圖像特征提取與求單應(yīng)性矩陣,這步可以省略了。代碼可以參考上一篇文章即可。

        2. 使用單應(yīng)性矩陣求得右側(cè)變換之后的圖像跟mask

        3. 根據(jù)mask得權(quán)重mask層

        4. 最后跟之前的一致,直接融合即可。

        特征提取部分代碼,參考之前文章,不寫廢話。融合部分,修改后的代碼如下

         1// 獲取全景圖大小
        2int h = max(left.rows, right.rows);
        3int w = left.cols + right.cols;
        4Mat panorama_01 = Mat::zeros(Size(w, h), CV_8UC3);
        5Rect roi;
        6roi.x = 0;
        7roi.y = 0;
        8roi.width = left.cols;
        9roi.height = left.rows;
        10
        11// 獲取左側(cè)與右側(cè)對齊圖像
        12left.copyTo(panorama_01(roi));
        13Mat panorama_02;
        14warpPerspective(right, panorama_02, H, Size(w, h));
        15imwrite("D:/panorama_02.png", panorama_02);
        16
        17// 計算融合重疊區(qū)域mask
        18Mat mask = Mat::zeros(Size(w, h), CV_8UC1);
        19generate_mask(panorama_02, mask);
        20
        21// 創(chuàng)建遮罩層并根據(jù)mask完成權(quán)重初始化
        22Mat mask1 = Mat::ones(Size(w, h), CV_32FC1);
        23Mat mask2 = Mat::ones(Size(w, h), CV_32FC1);
        24
        25// left mask
        26linspace(mask1, 10, left.cols, mask);
        27
        28// right mask
        29linspace(mask2, 01, left.cols, mask);
        30
        31// 左側(cè)融合
        32Mat m1;
        33vector<Mat> mv;
        34mv.push_back(mask1);
        35mv.push_back(mask1);
        36mv.push_back(mask1);
        37merge(mv, m1);
        38panorama_01.convertTo(panorama_01, CV_32F);
        39multiply(panorama_01, m1, panorama_01);
        40
        41// 右側(cè)融合
        42mv.clear();
        43mv.push_back(mask2);
        44mv.push_back(mask2);
        45mv.push_back(mask2);
        46Mat m2;
        47merge(mv, m2);
        48panorama_02.convertTo(panorama_02, CV_32F);
        49multiply(panorama_02, m2, panorama_02);
        50
        51// 合并全景圖
        52Mat panorama;
        53add(panorama_01, panorama_02, panorama);
        54panorama.convertTo(panorama, CV_8U);    
        55imwrite("D:/panorama.png", panorama);


        測試了一張圖像,特征點匹配效果如下:


        拼接融合之后圖像:

        說明是真的沒問題了!(邊上還有點黑的,可以直接裁了,比較懶了!)


        好消息!

        小白學(xué)視覺知識星球

        開始面向外開放啦??????




        下載1:OpenCV-Contrib擴展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實戰(zhàn)項目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

        下載3:OpenCV實戰(zhàn)項目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 49
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久精品黄片 | 黄色艹逼 | 美女高潮爽到喷出精子 | 黄色五月天小说 | 国产美女一级真毛片酒店 | 美女被c的网站 | 欧美精品一区二区少妇免费A片 | 91无码人妻精品一区二区三区男 | 少妇小树林裸体野战视频在线观看 | 美女三级在线 |