日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSE2实现HAAR小波变换(dwt2与idwt2)

發布時間:2025/7/25 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSE2实现HAAR小波变换(dwt2与idwt2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

wiki鏈接:http://en.wikipedia.org/wiki/Haar_wavelet

?

可用SSE2實現HAAR小波變換,達到實時,關于HAAR小波的介紹可參考以上維基鏈接

?參考MATLAB中dwt2與idwt2的函數原型,基于OpenCV的框架進行了匯編優化實現

HAAR小波也可用于圖像的壓縮,將CH,CV,CD中的分量值小于某一閾值則歸為0,從而這三個矩陣將成為稀疏矩陣(Sparse Matrix),反變換后的圖像的質量將取決于選擇閾值的大小。

?

實際實現時,可選擇使用浮點數(單精度或雙精度)進行矩陣計算,使用整數計算能得到更快的速度但不能進行完整的壓縮與解壓縮。

?

附代碼:

?

[cpp]?view plain?copy
  • inline?void?dwt2_row(__out?double*?ca0,??
  • ?????????????????????__out?double*?ch0,??
  • ?????????????????????__out?double*?cv0,??
  • ?????????????????????__out?double*?cd0,??
  • ?????????????????????__in?unsigned?char*?row0,??
  • ?????????????????????__in?unsigned?char*?row1,??
  • ?????????????????????__in?int?col)??
  • {??
  • ????__asm??
  • ????{??
  • ????????mov?????????eax_ptr,?ca0;??
  • ????????mov?????????ebx_ptr,?ch0;??
  • ????????mov?????????ecx_ptr,?cv0;??
  • ????????mov?????????edx_ptr,?cd0;??
  • ????????mov?????????esi_ptr,?row0;??
  • ????????mov?????????edi_ptr,?row1;??
  • ????????pxor????????xmm3,?xmm3;??
  • ????????movapd??????xmm7,?g_halfd;??
  • ????????sub?????????col,?4;??
  • ????????jl??????????loop_2;??
  • loop_4:??
  • ????????movd????????xmm1,?[esi_ptr];??
  • ????????movd????????xmm5,?[edi_ptr];??
  • ????????punpcklbw???xmm1,?xmm3;??
  • ????????punpcklbw???xmm5,?xmm3;??
  • ????????punpcklwd???xmm1,?xmm3;??
  • ????????punpcklwd???xmm5,?xmm3;??
  • ????????cvtdq2pd????xmm0,?xmm1;??
  • ????????cvtdq2pd????xmm4,?xmm5;??
  • ????????shufpd??????xmm1,?xmm1,?1;??
  • ????????shufpd??????xmm5,?xmm5,?1;??
  • ????????cvtdq2pd????xmm1,?xmm1;??
  • ????????cvtdq2pd????xmm5,?xmm5;??
  • ????????addpd???????xmm4,?xmm0;??
  • ????????addpd???????xmm5,?xmm1;??
  • ????????mulpd???????xmm4,?xmm7;??
  • ????????mulpd???????xmm5,?xmm7;??
  • ????????subpd???????xmm0,?xmm4;??
  • ????????subpd???????xmm1,?xmm5;??
  • ????????movapd??????xmm6,?xmm4;??
  • ????????movapd??????xmm2,?xmm0;??
  • ????????shufpd??????xmm4,?xmm5,?0;??
  • ????????shufpd??????xmm6,?xmm5,?3;??
  • ????????shufpd??????xmm0,?xmm1,?0;??
  • ????????shufpd??????xmm2,?xmm1,?3;??
  • ????????addpd???????xmm6,?xmm4;??
  • ????????addpd???????xmm2,?xmm0;??
  • ????????mulpd???????xmm6,?xmm7;??
  • ????????mulpd???????xmm2,?xmm7;??
  • ????????subpd???????xmm4,?xmm6;??
  • ????????subpd???????xmm0,?xmm2;??
  • ????????movupd??????[eax_ptr],?xmm6;??
  • ????????movupd??????[ebx_ptr],?xmm4;??
  • ????????movupd??????[ecx_ptr],?xmm2;??
  • ????????movupd??????[edx_ptr],?xmm0;??
  • ????????add?????????esi_ptr,?4;??
  • ????????add?????????edi_ptr,?4;??
  • ????????add?????????eax_ptr,?0x10;??
  • ????????add?????????ebx_ptr,?0x10;??
  • ????????add?????????ecx_ptr,?0x10;??
  • ????????add?????????edx_ptr,?0x10;??
  • ????????sub?????????col,?4;??
  • ????????jge?????????loop_4;??
  • loop_2:??
  • ????????cmp?????????col,?-2;??
  • ????????jl??????????loop_end;??
  • ????????pinsrw??????xmm0,?[esi_ptr],?0;??
  • ????????pinsrw??????xmm4,?[edi_ptr],?0;??
  • ????????punpcklbw???xmm0,?xmm3;??
  • ????????punpcklbw???xmm4,?xmm3;??
  • ????????punpcklwd???xmm0,?xmm3;??
  • ????????punpcklwd???xmm4,?xmm3;??
  • ????????cvtdq2pd????xmm0,?xmm0;??
  • ????????cvtdq2pd????xmm4,?xmm4;??
  • ????????addpd???????xmm4,?xmm0;??
  • ????????mulpd???????xmm4,?xmm7;??
  • ????????subpd???????xmm0,?xmm4;??
  • ????????movapd??????xmm5,?xmm4;??
  • ????????shufpd??????xmm4,?xmm0,?0;??
  • ????????shufpd??????xmm5,?xmm0,?3;??
  • ????????addpd???????xmm5,?xmm4;??
  • ????????mulpd???????xmm5,?xmm7;??
  • ????????subpd???????xmm4,?xmm5;??
  • ????????movsd???????[eax_ptr],?xmm5;??
  • ????????shufpd??????xmm5,?xmm5,?1;??
  • ????????movsd???????[ebx_ptr],?xmm4;??
  • ????????shufpd??????xmm4,?xmm4,?1;??
  • ????????movsd???????[ecx_ptr],?xmm5;??
  • ????????movsd???????[edx_ptr],?xmm4;??
  • loop_end:??
  • ????}??
  • }??
  • ??
  • inline?void?idwt2_row(__out?unsigned?char*?row0,??
  • ??????????????????????__out?unsigned?char*?row1,??
  • ??????????????????????__in?double*?ca0,??
  • ??????????????????????__in?double*?ch0,??
  • ??????????????????????__in?double*?cv0,??
  • ??????????????????????__in?double*?cd0,??
  • ??????????????????????__in?int?col)??
  • {??
  • ????__asm??
  • ????{??
  • ????????mov?????????eax_ptr,?ca0;??
  • ????????mov?????????ebx_ptr,?ch0;??
  • ????????mov?????????ecx_ptr,?cv0;??
  • ????????mov?????????edx_ptr,?cd0;??
  • ????????mov?????????esi_ptr,?row0;??
  • ????????mov?????????edi_ptr,?row1;??
  • ????????sub?????????col,?4;??
  • ????????jl??????????loop_2;??
  • loop_4:??
  • ????????movupd??????xmm0,?[eax_ptr];??
  • ????????movupd??????xmm1,?[ebx_ptr];??
  • ????????movupd??????xmm4,?[ecx_ptr];??
  • ????????movupd??????xmm5,?[edx_ptr];??
  • ????????addpd???????xmm1,?xmm0;??
  • ????????addpd???????xmm5,?xmm4;??
  • ????????addpd???????xmm0,?xmm0;??
  • ????????addpd???????xmm4,?xmm4;??
  • ????????subpd???????xmm0,?xmm1;??
  • ????????subpd???????xmm4,?xmm5;??
  • ????????movapd??????xmm2,?xmm1;??
  • ????????movapd??????xmm6,?xmm5;??
  • ????????shufpd??????xmm1,?xmm0,?0;??
  • ????????shufpd??????xmm2,?xmm0,?3;??
  • ????????shufpd??????xmm5,?xmm4,?0;??
  • ????????shufpd??????xmm6,?xmm4,?3;??
  • ????????addpd???????xmm5,?xmm1;??
  • ????????addpd???????xmm6,?xmm2;??
  • ????????addpd???????xmm1,?xmm1;??
  • ????????addpd???????xmm2,?xmm2;??
  • ????????subpd???????xmm1,?xmm5;??
  • ????????subpd???????xmm2,?xmm6;??
  • ????????cvttpd2dq???xmm5,?xmm5;??
  • ????????cvttpd2dq???xmm6,?xmm6;??
  • ????????cvttpd2dq???xmm1,?xmm1;??
  • ????????cvttpd2dq???xmm2,?xmm2;??
  • ????????shufpd??????xmm5,?xmm6,?0;??
  • ????????shufpd??????xmm1,?xmm2,?0;??
  • ????????packssdw????xmm5,?xmm1;??
  • ????????packuswb????xmm5,?xmm5;??
  • ????????pshufd??????xmm1,?xmm5,?1;??
  • ????????movd????????[esi_ptr],?xmm5;??
  • ????????movd????????[edi_ptr],?xmm1;??
  • ????????add?????????esi_ptr,?4;??
  • ????????add?????????edi_ptr,?4;??
  • ????????add?????????eax_ptr,?0x10;??
  • ????????add?????????ebx_ptr,?0x10;??
  • ????????add?????????ecx_ptr,?0x10;??
  • ????????add?????????edx_ptr,?0x10;??
  • ????????sub?????????col,?4;??
  • ????????jge?????????loop_4;??
  • loop_2:??
  • ????????cmp?????????col,?-2;??
  • ????????jl??????????loop_end;??
  • ????????movsd???????xmm0,?[eax_ptr];??
  • ????????movsd???????xmm1,?[ebx_ptr];??
  • ????????movsd???????xmm4,?[ecx_ptr];??
  • ????????movsd???????xmm5,?[edx_ptr];??
  • ????????addpd???????xmm1,?xmm0;??
  • ????????addpd???????xmm5,?xmm4;??
  • ????????addpd???????xmm0,?xmm0;??
  • ????????addpd???????xmm4,?xmm4;??
  • ????????subpd???????xmm0,?xmm1;??
  • ????????subpd???????xmm4,?xmm5;??
  • ????????shufpd??????xmm1,?xmm0,?0;??
  • ????????shufpd??????xmm5,?xmm4,?0;??
  • ????????addpd???????xmm5,?xmm1;??
  • ????????addpd???????xmm1,?xmm1;??
  • ????????subpd???????xmm1,?xmm5;??
  • ????????cvttpd2dq???xmm5,?xmm5;??
  • ????????cvttpd2dq???xmm1,?xmm1;??
  • ????????packssdw????xmm5,?xmm1;??
  • ????????packuswb????xmm5,?xmm5;??
  • ????????movd????????eax_ptr,?xmm5;??
  • ????????mov?????????[esi_ptr],?ax;??
  • ????????shr?????????eax_ptr,?16;??
  • ????????stosw;??
  • loop_end:??
  • ????}??
  • }??
  • ??
  • inline?void?dwt2(__out?cv::Mat&?CA,??
  • ?????????????????__out?cv::Mat&?CH,??
  • ?????????????????__out?cv::Mat&?CV,??
  • ?????????????????__out?cv::Mat&?CD,??
  • ?????????????????__in?cv::Mat?const&?I)??
  • {??
  • ????if(CA.type()?!=?CV_64FC1?||?CH.type()?!=?CV_64FC1?||?CV.type()?!=?CV_64FC1?||?CD.type()?!=?CV_64FC1?||?I.channels()?!=?1)??
  • ????????return;??
  • ??
  • ????double*?ca?=?reinterpret_cast<double*>(CA.data);??
  • ????double*?ch?=?reinterpret_cast<double*>(CH.data);??
  • ????double*?cv?=?reinterpret_cast<double*>(CV.data);??
  • ????double*?cd?=?reinterpret_cast<double*>(CD.data);??
  • ????unsigned?char*?row?=?reinterpret_cast<unsigned?char*>(I.data);??
  • ??
  • ????for(int?i=0;?i<I.rows;?i+=2)??
  • ????{??
  • ????????dwt2_row(ca,?ch,?cv,?cd,?row,?row+I.cols,?I.cols);??
  • ????????ca?+=?CA.cols;??
  • ????????ch?+=?CH.cols;??
  • ????????cv?+=?CV.cols;??
  • ????????cd?+=?CD.cols;??
  • ????????row?+=?I.cols*2;??
  • ????}??
  • }??
  • ??
  • inline?void?idwt2(__out?cv::Mat&?I,??
  • ??????????????????__in?cv::Mat?const&?CA,??
  • ??????????????????__in?cv::Mat?const&?CH,??
  • ??????????????????__in?cv::Mat?const&?CV,??
  • ??????????????????__in?cv::Mat?const&?CD)??
  • {??
  • ????if(CA.type()?!=?CV_64FC1?||?CH.type()?!=?CV_64FC1?||?CV.type()?!=?CV_64FC1?||?CD.type()?!=?CV_64FC1?||?I.channels()?!=?1)??
  • ????????return;??
  • ??
  • ????double*?ca?=?reinterpret_cast<double*>(CA.data);??
  • ????double*?ch?=?reinterpret_cast<double*>(CH.data);??
  • ????double*?cv?=?reinterpret_cast<double*>(CV.data);??
  • ????double*?cd?=?reinterpret_cast<double*>(CD.data);??
  • ????unsigned?char*?row?=?reinterpret_cast<unsigned?char*>(I.data);??
  • ??
  • ????for(int?i=0;?i<I.rows;?i+=2)??
  • ????{??
  • ????????idwt2_row(row,?row+I.cols,?ca,?ch,?cv,?cd,?I.cols);??
  • ????????ca?+=?CA.cols;??
  • ????????ch?+=?CH.cols;??
  • ????????cv?+=?CV.cols;??
  • ????????cd?+=?CD.cols;??
  • ????????row?+=?I.cols*2;??
  • ????}??
  • }??

  • 版權歸作者所有,轉載請注明出處!

    總結

    以上是生活随笔為你收集整理的SSE2实现HAAR小波变换(dwt2与idwt2)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产日韩欧美精品一区二区 | 亚洲视频黄 | 91网页在线观看 | 毛片高清 | 日精品| www.久久视频 | 中文字幕123区 | 夜夜噜噜噜 | 在线看片中文字幕 | 午夜精品国产精品大乳美女 | 未满十八岁禁止进入 | 国产精品宾馆在线 | 国产最新av | 伊人网在线视频观看 | 综合一区在线 | 日韩欧美有码 | 国产美女免费视频 | 91精品人妻一区二区三区果冻 | 91免费片 | 国产草草影院 | 亚洲成人av | wwwxxx色| 国产69精品麻豆 | 美女穴穴| 久久久无码18禁高潮喷水 | 国产人伦精品一区二区三区 | 另类国产 | 一级黄色视 | 美女100%无挡 | 亚洲在线网站 | 亚洲影库 | 又大又硬又爽免费视频 | 饥渴少妇色诱水电工 | 中日韩精品视频在线观看 | 男男在线观看 | 黄网站免费观看 | 欧美性tv | 久草一本| 亚洲free性xxxx护士hd | 九九小视频 | 污片在线观看 | 日韩一级影院 | 99视频| 性少妇mdms丰满hdfilm | 久久好色 | 黄色av电影网址 | 免费在线色 | 99精品视频一区二区三区 | 久久视频免费在线观看 | 亚洲精品乱码久久久久99 | 一区二区三区少妇 | 婷婷影视 | 国语对白做受xxxxx在线中国 | 在线草 | 97人人模人人爽人人少妇 | 亚洲精品一区在线观看 | 亚洲一区二区三区久久久成人动漫 | 窝窝午夜理论片影院 | 一二三不卡 | 中文字幕在线观看高清 | 蜜桃精品久久久久久久免费影院 | 91色精品| av观看国产 | 精品国产一区二区三区无码 | 亚洲国产精品成人无码区 | 在线观看成人免费 | 91精品久久久久久综合五月天 | 欧美大肥婆大肥bbbbb | 久久精品免费看 | 秘密基地动漫在线观看免费 | 欧美日韩视频在线观看免费 | 国产激情自拍视频 | 韩国av在线免费观看 | 黄色网址中文字幕 | 无码一区二区精品 | 天堂视频在线观看免费 | 五月天六月婷婷 | 中文字幕91在线 | 亚洲视频自拍 | 日本国产中文字幕 | 91精品免费看 | 精品爆乳一区二区三区 | 亚洲成人一二三区 | 三级大片在线观看 | 国产成人久久77777精品 | 99视频 | 欧美色拍 | 五月天综合在线 | 国产偷人爽久久久久久老妇app | 农村偷人一级超爽毛片 | 欧美国产日韩在线观看成人 | 乳孔很大能进去的av番号 | 国产做爰xxxⅹ高潮视频12p | 九九视频免费观看 | 蜜桃传媒一区二区亚洲av | 综合色88 | 丰满人妻老熟妇伦人精品 | 亚洲天堂热 | 国产极品在线播放 |