⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funcs.asm

📁 基于TIc6205DSP上开发的MeanShift结合Kalman滤波的代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:

				.def _ImageSub
                .def _PixStat
                .def _PixLineFilter
				.def _SquareX
				.def _MutualityH
				.def _GetInitSqrt



;===============================================================================
;   子程序名: ImageSub
;   功能:     做差分图
;   输入接口: A4,B4为两幅做差分的源图地址, A6为差分图的地址,B6为图像字节数
;              A8为二值化的阈值
;===============================================================================
_ImageSub:
				STW				A0, *--B15
				STW				A1, *--B15
				STW				A2, *--B15
				STW				A7, *--B15
				STW				A8, *--B15
				STW             A9, *--B15
				STW				A10, *--B15
				STW				A11, *--B15
				STW             B0, *--B15
				STW             B1, *--B15
				STW				B2, *--B15
				STW				B7, *--B15
				STW				B8, *--B15
				STW             B9, *--B15
				STW				B10, *--B15
				STW				B11, *--B15

				MV				B6, A1
            	LDW 	.D1		*A4++, A7
			||	LDW 	.D2		*B4++, B7
				NOP		4

				MVK     .S1     0FFH, A0
				MV              A8, B2    
                AND     .L2X    B2, A0, B2   ;阈值
                 
				SHR				A1, 2, A1
				MVK		.S2		0, B0
			||  MVK		.S1		89,A2
			
LPSub:			
				
				MVK		.S1		0FFH, A0		; in A2 are mask value
            ||	MV		.L1		A7, A8
            ||	MV		.L2		B7, B8

	      [!B0] MV		.L2X  	A8, B8
	   || [!A2] MV		.L1X 	B8, A8
       || [!A2] MVK		.S1		90, A2
       || [!A2] MVK		.S2		0, B0
         

            	LDW 	.D1		*A4++, A7
			||	LDW 	.D2		*B4++, B7
			||	AND		.L1		A8, A0, A10		;byte 0
			||	AND		.L2X	B8, A0, B10
			||  SHRU    .S1     A8, 8, A9
			||  SHRU    .S2     B8, 8, B9
			
				AND		.L1		A9, A0, A11		;byte1
			||	AND		.L2X	B9, A0, B11
			||  SHRU    .S1     A9, 8, A8
			||  SHRU    .S2     B9, 8, B8
				SUB		.L1X	A10, B10, A10
			||  SUB     .L2X    B11, A11, B11 
				ABS		.L2		B11, B10
			||	ABS		.L1		A10, A10
				CMPGTU	.L1X    A10, B2, A10
			||	CMPGTU  .L2     B10, B2, B10
			    MPY     .M1     A10, A0, A10
			||  MPY     .M2X    B10, A0, B10    ;A10、B10在一个时隙后可以拼接
			
				AND		.L1		A8, A0, A11		;byte2
			||	AND		.L2X	B8, A0, B11
			||	SHRU	.S1		A8, 8, A9
			||	SHRU	.S2		B8, 8, B9
				SUB     .L2X    B11, A11, B11
			||	SHL     .S2     B10, 8, B10	
			    ABS     .L2     B11, B11        ;B11中的减法结果等待二值化、移位再填充到A10
			||	OR		.L1X	A10, B10, A10	
				SUB     .L1X    A9, B9, A11    ;BYTE 3
				ABS     .L1     A11, A11
			||	CMPGTU  .L2     B11, B2, B11
				CMPGTU  .L1X    A11, B2, A11
			||  MPY     .M2X    B11, A0, B11	
			||  SUB		.S1		A1, 1, A1

		[A1]	B		.S2		LPSub
                MPY     .M1     A11, A0, A11
            ||  ADD     .L2     B0, 1, B0
            ||  SUB     .L1     A2, 1, A2
                SHL     .S2     B11, 16, B11
                OR      .L1X    A10, B11, A10
            ||  SHL     .S1     A11, 24, A11
                OR      .L1     A10, A11, A10
				STW		.D1		A10, *A6++
				
				LDW				*B15++, B11
				LDW				*B15++, B10
				LDW             *B15++, B9
				LDW				*B15++, B8
				LDW				*B15++, B7
				LDW				*B15++, B2
				LDW             *B15++, B1
				LDW             *B15++, B0
				LDW				*B15++, A11
				LDW				*B15++, A10
				LDW             *B15++, A9
				LDW				*B15++, A8
				LDW				*B15++, A7
				LDW				*B15++, A2
				LDW             *B15++, A1
				LDW             *B15++, A0
				B				B3
				NOP 			5

;===============================================================================
;	子程序名: PixStat
;	功    能: 统计差分图的横、纵亮度分布,统计结果存放在pHori, pVert两个向量中
;   输入参数: A4--图像首地址, B4--起始行数, A6--需统计行数
;			   B6--pHori        A8---pVert    B8---需统计的列数/4
;===============================================================================
* A1 -- Heightn   A4 -- pAddr   A5 -- pHori   B5 -- pVert
_PixStat:  
            STW				A0, *--B15
            STW				A1, *--B15
			STW				A4, *--B15
			STW				A5, *--B15
			STW				A6, *--B15
			STW				A7, *--B15
			STW				A8, *--B15
			STW				A9, *--B15
			STW				B1, *--B15
			STW				B5, *--B15
			STW				B6, *--B15
			STW				B8, *--B15
		    STW             B9, *--B15	 
		
             MV      .L2    B8, B9
             MV      .L2    B6, B8  
             MVK     .S1    0xFF, A0 
             SHL	 .S2	B4, 2, B4
             ADD     .L2    A8, B4, B5              
             MV      .L1    A6, A1
		  || SUB	 .S2	B5, 4, B5            

LoopHi:      
             MV      .L1X   B8, A5 			;A5---pHori
          || MV      .L2    B9, B1
          || ADD     .D2    B5, 4, B5    	;B5---pVert
LoopVi:
             
             LDW     .D1    *A4++,  A6
          || LDW     .D2    *B5, B6 
             NOP  4
             
             LDW     .D1    *A5, A9 		;A9 = *pHori
             AND     .L1    A6, A0, A7		;A7---Byte0 
             ADD     .S2X   B6, A7, B6 		;B6 += Byte0
             NOP  2
             ADD     .D1    A9, A7, A9
             STW     .D1    A9, *A5++		;
             
             LDW     .D1    *A5, A9
             SHR     .S1    A6, 8,  A7 
             AND     .L1    A7, A0, A7		;A7---Byte1
             ADD     .S2X   B6, A7, B6 		;B6 += Byte1
             NOP  
             ADD     .D1    A9, A7, A9
             STW     .D1    A9, *A5++
             
             LDW     .D1    *A5, A9
             SHR     .S1    A6, 16, A7
             AND     .L1    A7, A0, A7      ;A7---Byte2
             ADD     .S2X   B6, A7, B6      ;B6 += Byte2
             NOP
             ADD     .D1    A9, A7, A9
             STW     .D1    A9, *A5++
             
             LDW     .D1    *A5, A9            
             SHR     .S1    A6, 24, A6
             AND     .L1    A7, A0, A7      ;A7---Byte3
             ADD     .S2X   B6, A7, B6      ;B6 += Byte3
             NOP     
             ADD     .D1    A9, A7, A9
             STW     .D1    A9, *A5++
          || STW     .D2    B6, *B5  
          || SUB     .L2    B1, 1, B1
        
        [B1] B        LoopVi
             NOP 5
             SUB     .L1    A1, 1, A1  
        [A1] B        LoopHi
             NOP 5
                                                   
            LDW             *B15++, B9
            LDW				*B15++, B8
			LDW				*B15++, B6
			LDW				*B15++, B5
			LDW				*B15++, B1
			LDW				*B15++, A9
			LDW				*B15++, A8
			LDW				*B15++, A7
			LDW				*B15++, A6
			LDW				*B15++, A5
			LDW				*B15++, A4
			LDW				*B15++, A1
			LDW				*B15++, A0           
            
            B    B3
            NOP 5          



;=============================================================
;子程序名: PixLineFilter
;功    能: 将二值化的差分图滤波
;输入参数: 要处理的行首地址,处理结果存放的首地址
;=============================================================
_PixLineFilter:

             STW          A0, *--B15  
             STW          A1, *--B15 
             STW          A2, *--B15  
             STW          A5, *--B15
             STW          A6, *--B15  
             STW          A7, *--B15 
             STW          A9, *--B15
             STW          A10, *--B15  
             STW          A11, *--B15 
             STW          A12, *--B15  
             STW          A13, *--B15
             STW          B0, *--B15  
             STW          B1, *--B15 
             STW          B2, *--B15  
             STW          B5, *--B15
             STW          B6, *--B15  
             STW          B7, *--B15 
             STW          B8, *--B15  
             STW          B9, *--B15
             STW          B10, *--B15 
             STW          B11, *--B15  
             STW          B12, *--B15
             STW          B13, *--B15

             MVK     .S1   88, A1
             MVK     .S1   0x3fc, A7    ;  0X3Fc = 5*0xFF
          || MVK     .S2   0,  B8 
             MVK     .S1   90, A2
                  
             MVK     .S1   0xFF, A0 
          || MVK     .S2   0xFF, B0  
                          
             MV      .L2X   A4, B1
          || MVK     .S2    90, B2
          || LDW     .D1   *A4, A5		;本行四点----A5
             LDW     .D2   *+B1[B2],B5 	;下行四点----B5
             NOP 4
             LDW     .D2   *-B1[B2],B6 	;上行四点----B6
             NOP 2
             ADD     .L1   A4,  4,  A4      ;!!!    A4+1 --> +4
             AND     .L1   A5,  A0,  A10  
          || AND     .L2   B5,  B0,  B10
          || SHRU    .S1   A5,  8,   A9
          || SHRU    .S2   B5,  8,   B9          
             
             ADD     .L2X  B10, A10, B10    
          || AND     .S2   B6,  B0,  B2
             SHRU    .S2   B6,  8,   B6 
          || ADD     .L2   B10, B2,  B10   ;左第一列累加 -> B10
                
             AND     .L1   A9,  A0,  A11
          || AND     .L2   B9,  B0,  B11 
          || SHRU    .S1   A9,  8,  A5    
          || SHRU    .S2   B9,  8,  B5  
             
             ADD     .L2X  B11, A11, B11   
          || AND     .S2   B6,  B0,  B2
             SHRU    .S2   B6,  8,   B6 
          || ADD     .L2   B11, B2, B11    ;左第二列累加 -> B11
                        
             AND     .L1   A5,  A0,  A12
          || AND     .L2   B5,  B0,  B12 
          || SHRU    .S1   A5,  8,   A9    
          || SHRU    .S2   B5,  8,   B9  
             
             ADD     .L2X  B12, A12, B12
          || AND     .S2   B6,  B0,  B2
             SHRU    .S2   B6,  8,   B6 
          || ADD     .L2   B12, B2,  B12   ;左第三列累加 -> B12
                         
             AND     .L1   A9,  A0,  A13
          || AND     .L2   B9,  B0,  B13 
          || AND     .S2   B6,  B0,  B2
             ADD     .L2X  B13, A13, B13
             ADD     .L2   B13, B2,  B13   ;左第四列累加 -> B13        
         
             ADD     .L2   B8,  B10, B8
             ADD     .S2   B8,  B11, B8     ; B8 = 0+1  
          || ADD     .L2   B10, B11, B10
            
             CMPGTU  .L2X  B8,  A7,  B8
          || ADD     .S2   B10, B12, B10	; B10 = 0+1+2
             CMPGTU  .L2X  B10,  A7, B10
          || MPY     .M2   B8,  B0,  B8
             ADD     .L2   B11, B12, B11 
             MPY     .M2   B10,  B0, B10
             STB     .D2   B8,  *B4++         
          || ADD     .S2   B11, B13, B11    ; B11 = 1+2+3          
             STB     .D2   B10,  *B4++
          || CMPGTU  .L2X  B11,  A7, B11
             MPY     .M2   B11,  B0, B11
             MV      .L2   B12, B7
             STB     .D2   B11,  *B4++      
          || MV      .S2   B13, B8   		; B7 B8 --- 前两列累加值
             
NextPixW:    
                  
             MV      .L2X   A4, B1
          || MVK     .S2    90, B2
          || LDW     .D1   *A4, A5
             LDW     .D2   *+B1[B2],B5
             NOP 4
             LDW     .D2   *-B1[B2],B6
             NOP 2
             ADD     .L1   A4,  4,  A4		;!!!    A4+1 --> +4
             AND     .L1   A5,  A0,  A10  
          || AND     .L2   B5,  B0,  B10
          || SHRU    .S1   A5,  8,   A9
          || SHRU    .S2   B5,  8,   B9          
             

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -