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

📄 rsi_convolve.c

📁 C的卷积运算的源代码
💻 C
字号:
/* Copyright 1997, Research Systems, Inc. All Rights Reserved */

void rsi_convolve(int iImageX, int iImageY, float fImage[], 
                  int iFilterDimension, float fFilter[],
                  float fOutputImage[], int iCenterFlag)
{   
	float fSum;
	int t, u, i, j;   
	float *pfFilterLine;   
	float *pfImageLine;
	if (iCenterFlag == 0) {
		for (t = iFilterDimension - 1; t < iImageX; t++) {
			for (u = iFilterDimension - 1; u < iImageY; u++) {
				fSum = (float) 0.;
				for (i = 0; i < iFilterDimension; i++) {
				pfFilterLine = &fFilter[i*iFilterDimension];
				pfImageLine = &fImage[(t - i)*iImageX + u];
				for (j = 0; j < iFilterDimension; j++)
					fSum += *pfFilterLine++ * *pfImageLine--;
				}
				fOutputImage[t*iImageX + u] = fSum;
			}
		}   
	} 
	else 
	{
		for (t = iFilterDimension - 1; t < iImageX - 1; t++) {
			for (u = iFilterDimension - 1; u < iImageY - 1; u++) {
				fSum = (float) 0.;
				for (i = 0; i < iFilterDimension; i++) {
					pfFilterLine = &fFilter[i*iFilterDimension];
					pfImageLine = &fImage[(t + i - iFilterDimension/2)*iImageX + 
                                      u + iFilterDimension/2];
					for (j = 0; j < iFilterDimension; j++)
						fSum += *pfFilterLine++ * *pfImageLine--;
				}
				fOutputImage[t*iImageX + u] = fSum;
			}      
		}   
	}   
	return;
}

/* Copyright 1998, Research Systems, Inc. All Rights Reserved */

#ifdef WIN32
#include <windows.h>
#define IDL_LONG_RETURN __declspec(dllexport) int
#else
#define IDL_LONG_RETURN int
#endif
void rsi_convolve(int iImageX, int iImageY, float fImage[], 
                  int iFilterDimension, float fFilter[],
                  float fOutputImage[], int iCenterFlag);

IDL_LONG_RETURN RSI_Convolve_Ext(int argc, void *argv[])
{	
	int iImageX;
	int iImageY;
	float *pfImage;
	int iFilterDimension;
	float *pfFilter;
	float *pfOutputImage;
	int iCenterFlag;

	iImageX = *(int *) argv[0];
	iImageY = *(int *) argv[1];
	pfImage = (float *) argv[2];
	iFilterDimension = *(int *) argv[3];
	pfFilter = (float *) argv[4];
	pfOutputImage = (float *) argv[5];
	iCenterFlag = *(int *) argv[6];
	rsi_convolve(iImageX, iImageY, pfImage, iFilterDimension, pfFilter, 
		pfOutputImage, iCenterFlag);
	return(1L);
}

⌨️ 快捷键说明

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