source: pacpusframework/branches/2.0-beta1/include/extlib/EStereo/processingMMX.h@ 89

Last change on this file since 89 was 89, checked in by morasjul, 11 years ago

PACPUS 2.0 Beta deployed in new branch

Major changes:
-Add communication interface between components
-Add examples for communications interface (TestComponents)
-Move to Qt5 support

  • Property svn:executable set to *
File size: 7.9 KB
Line 
1/***************************************************************************
2*
3* Copyright 2000 by David Demirdjian. All rights reserved.
4*
5* Developed by David Demirdjian
6*
7* Permission to use, copy, or modify this software and its documentation
8* for educational and research purposes only and without fee is hereby
9* granted, provided that this copyright notice and the original authors's
10* names appear on all copies and supporting documentation. If individual
11* files are separated from this distribution directory structure, this
12* copyright notice must be included. For any other uses of this software,
13* in original or modified form, including but not limited to distribution
14* in whole or in part, specific prior permission must be obtained from
15* MIT. These programs shall not be used, rewritten, or adapted as the
16* basis of a commercial software or hardware product without first
17* obtaining appropriate licenses from David Demirdjian. The author makes
18* no representations about the suitability of this software for any purpose.
19* It is provided "as is" without express or implied warranty.
20*
21**************************************************************************/
22#ifndef _PROCESSING_MMX_H
23#define _PROCESSING_MMX_H
24
25typedef unsigned char uchar;
26typedef unsigned short ushort;
27
28// translate image of 'tx' pixels to the right
29// (or left if tx<0)
30inline void translateImage(int tx, uchar* data1, int siz);
31
32// normalize intensities in images
33inline void normalizeImages(uchar* data1, uchar* data2, uchar* data3, int siz);
34inline void normalizeImages(uchar* data1, uchar* data, int siz);
35inline void normalizeImages(const uchar* data1, const uchar* data2, const uchar* data3,
36 uchar* out1, uchar* out2, uchar* out3, int siz);
37inline void normalizeImages(const uchar* data1, const uchar* data2,
38 uchar* out1, uchar* out2, int siz);
39
40// shrink images by a factor 'fact'. eg if fact = 2, out will be twice as small as src
41inline void shrinkImages(uchar* dst, const uchar* src, int width, int height, int fact);
42
43
44// ImgSub2: D = saturation0(|S1 - S2| + |S1 - S3|)
45inline int ImgSubandAdd(const uchar *Src1, const uchar *Src2,
46 const uchar *Src3, uchar *Dest, int l);
47// int ImgSubandAdd_sse2(const uchar *Src1, const uchar *Src2, const uchar *Src3, uchar *Dest, int l);
48inline int ImgSubandAdd(const uchar *Src1, const uchar *Src2,
49 uchar *Dest, int l);
50
51inline int ImgSubandAdd2(const uchar *Src1, const uchar *Src2,
52 const uchar *Src3, uchar* Dest1, int l, int imageSize, int width);
53inline int ImgSubandAdd2_Vert(const uchar *Src1, const uchar *Src2,
54 uchar* Dest1,
55 int l, int imageSize, int width);
56inline int ImgSubandAdd_Horiz(const uchar *Src1, const uchar *Src3, uchar* Dest1,
57 int l, int imageSize, int width);
58
59
60
61// ---------------------
62// init BestCorrelation and SecondCOrrelation with CurrentCorrelation
63// init Disparity with disparityInit
64inline int initMinimumCorrelation(const uchar *CurrentCorrelation, uchar disparityInit, uchar *Disparity,
65 uchar *BestCorrelation, uchar *SecondCorrelation, int bytecount);
66// ----------------------
67// FULL IMAGE, BEST ONLY : Keith's code
68inline int findMinimumCorrelation_mmx(const uchar *CurrentCorrelation, uchar CurrentDisparity, uchar *Disparity,
69 uchar *BestCorrelation, int bytecount) ;
70// ----------------------
71// FULL IMAGE, BEST+SECOND : Keith's code
72inline int findMinimumCorrelation_mmx( const uchar *CurrentCorrelation, uchar CurrentDisparity, uchar *Disparity,
73 uchar *BestCorrelation, uchar *SecondCorrelation, int bytecount);
74
75
76
77// ------------------------ image filters -------------------------------
78inline void sum_5x5_mmx(uchar* im, ushort* im_out, int dataSize, int width, ushort* buff);
79inline void sum_5x5_mmx(uchar* im, uchar* im_out, int dataSize, int width, ushort* buff);
80
81// ------- row filters -------
82 template<class T> void sum_Row_5(T* im, ushort* im_out, int rowSize);
83 inline void sum_Row_mmx(uchar* im, ushort* im_out, int rowSize, int maskSize);
84 inline void sum_Row_mmx(ushort* im, ushort* im_out, int rowSize, int maskSize) ;
85 inline void sum_Row_5_mmx(uchar* im, ushort* im_out, int rowSize);
86 inline void sum_Row_5_mmx(ushort* im, ushort* im_out, int rowSize);
87
88// ------- cols filters -------
89 inline void avg_Col(ushort* im, uchar* im_out, int dataSize, int width, int sizeMask);
90
91 inline void avg_Col_mmx(ushort* im, uchar* im_out, int dataSize, int width, int sizeMask);
92 inline void avg_Col_sse2(ushort* im, uchar* im_out, int dataSize, int width, int sizeMask);
93 inline void avg_Col_5(ushort* im, uchar* im_out, int dataSize, int width);
94 inline void avg_Col_7(ushort* im, uchar* im_out, int dataSize, int width);
95 inline void avg_Col_9(ushort* im, uchar* im_out, int dataSize, int width);
96 inline void avg_Col_11(ushort* im, uchar* im_out, int dataSize, int width);
97 inline void avg_Col_13(ushort* im, uchar* im_out, int dataSize, int width);
98 inline void avg_Col_15(ushort* im, uchar* im_out, int dataSize, int width);
99 inline void avg_Col_17(ushort* im, uchar* im_out, int dataSize, int width);
100
101inline void add_Col_5_wb(ushort* im, uchar* im_out, int dataSize, int width);
102inline void add_Col_5_ww(ushort* im, ushort* im_out, int dataSize, int width);
103
104// ------- cols filters -------
105inline void avg_Col_5_sse2(ushort* im, uchar* im_out, int dataSize, int width);
106inline void avg_Col_7_sse2(ushort* im, uchar* im_out, int dataSize, int width);
107inline void avg_Col_9_sse2(ushort* im, uchar* im_out, int dataSize, int width);
108inline void avg_Col_11_sse2(ushort* im, uchar* im_out, int dataSize, int width);
109inline void avg_Col_13_sse2(ushort* im, uchar* im_out, int dataSize, int width);
110
111
112// return the average pixel value
113inline float pixelMean(const uchar* im, int imageSize);
114
115// check that the diff. between best and second disp. scores in great enough
116inline void compareBestAndSecond(uchar* bestScores, uchar* secondScores, char thresh,
117 uchar valForReplacement,
118 uchar* disp, int dataSize);
119
120// image copy
121// windowWidth must be multiple of 8
122inline void cropImage(const uchar* imSrc, int width, int height,
123 uchar* imDest, int x0, int y0, int windowWidth, int windowHeight);
124
125
126
127// apply mask: if mask[]==undefined_val im[]->im[]
128// otherwise im[]->mask[]
129inline void overrideImage(uchar* im, const uchar* mask, uchar undefined_val, int imageSize);
130inline void overrideImageMMX(uchar* im, const uchar* mask, uchar undefined_val, int imageSize);
131inline void copyMMX(void* imDest, const void* imSrc, int dataSize);
132inline void copySSE(void* imDest, const void* imSrc, int dataSize);
133inline void setMMX(float* imDest, const float value, int dataSize);
134inline void setMMX(char* imDest, const char value, int dataSize);
135
136// multiply im. by a constant 'fact'
137inline void multiply(uchar* im, float fact, int imageSize);
138inline void multiply(const uchar* imSrc, uchar* imDest, float fact, int imageSize);
139inline void divide(ushort* im, uchar* div, uchar* result, int imageSize);
140inline void binarize(uchar* im, uchar* im_out, uchar undefined_val, int dataSize);
141inline void set_undefined_to_zero(uchar* im, uchar* im_out, uchar undefined_val, int dataSize);
142inline void set_zero_to_undefined(uchar* im, uchar* im_out, uchar undefined_val, int dataSize);
143
144// check depth validity
145void checkDisparityValidity(uchar* disp, uchar* buff, int buffStep,
146 uchar* bestScore, uchar tol,
147 uchar undefined_val, uchar nbDepth,
148 int imageSize);
149void checkDisparityValidityAndSearchAround(uchar* disp, uchar* buff, int buffStep,
150 uchar* bestScore, uchar tol,
151 uchar undefined_val, uchar nbDepth,
152 int imageSize);
153// 3D reconst
154//void createIdxValidPixelsList(const uchar* depth_image, int* idx_valid_pixels, int& nbPoints, int siz, int UNDEFINED_DEPTH);
155
156#include "processingMMX.inl"
157#include "processingSSE2.inl"
158
159#endif
Note: See TracBrowser for help on using the repository browser.