#define _CRT_SECURE_NO_DEPRECATE
#include "gray_enhance.h"
#include "SpatialFiltering.h"
#include "FrequencyFiltering.h"
int main()
{
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER infoHeader;
BYTE *extra = NULL;
RGBQUAD *Quad8 = NULL, *Quad4 = NULL; //调色板
RGB *img24 = NULL;
RGB *img24_Out = NULL;
BYTE *img8 = NULL;
BYTE *img8_Out = NULL;
FILE* pfin = NULL;
FILE* pfout = NULL;
/*FILE* txtfp = NULL;*/
char *temp = NULL;
int height, width;
int height_out, width_out;
int size;
int i;
int dif;
int MirrorMode;
int mode; //计算模式
int intermode; //插值方式
int template_size; //卷积模板大小
int Spatial_filtermode; //空域滤波类型
int trans_mode; //彩色转灰度转换方式
int Freq_Filter_Mode; //频域滤波类型
int Freq_n; //滤波阶数
int Freq_filter_class; //频域滤波器选择
int Up_Down, Left_Right; //图像平移位数
int Crop_left, Crop_right;//图像裁剪左右端
int Crop_down, Crop_up; //图像裁剪上下端
double LogC;
double ExpC, ExpGamma;
double LinearK, LinearB;
double RotAngle;
double WidthScale, HeightScale;
double D0; //频域滤波截止频率
double D1;
char file_in[800];
char file_out[800];
strcpy(file_in, "C:\\zkyfile\\image_processing_test\\lenna.bmp");
strcpy(file_out, "C:\\zkyfile\\image_processing_test\\lenna_out.bmp");
//double c;
//int a, b;
//int d;
////a = 103;
//for (a = 1; a < 257; a++)
//{
// b = 256;
// c = (a + 0.0) / (b + 0.0);
// d = (int)(c*b);
// printf("%lf %d %d %d\n", c,a,d,a-d);
//}
if (strcmp(file_in, file_out) == 0)
{
printf("输入文件和输出文件不能相等!\n");
getchar();
system("pause");
return 0;
}
pfin = fopen(file_in, "rb");
if (pfin == NULL)
{
printf("打开文件失败!\n");
getchar();
system("pause");
return 0;
}
while (1)
{
printf("\n\n\t\t欢迎来到图像处理系统!\n\n\n");
printf("线性:1 指数:2 对数:3 旋转:4 缩放:5 镜像:6\n");
printf("直方图均衡:7 均值滤波:8 彩色转灰度图(彩色图):9 中值滤波:10\n ");
printf("空域滤波集成函数:11 傅里叶变换图:12 频域滤波集成函数:13\n");
printf("图像平移:14 图像裁剪:15 离散余弦变换:16 DCT与IDCT测试:17\n");
printf("退出:其他\n\n");
printf("请输入你要进行的操作:\n");
scanf("%d", &mode);
ExpC = 1;
ExpGamma = 3;
LogC = 1;
LinearK = 2;
LinearB = 20;
MirrorMode = 2;
WidthScale = 1.0;
HeightScale = 1.0;
//输出图像长宽与输入长宽之比
RotAngle = 45;
template_size = 3;
Spatial_filtermode = 1;
trans_mode = 1;
Freq_Filter_Mode = 1;
Freq_filter_class = 1;
Freq_n = 3;
D0 = 30.0;
D1 = D0 + 10.0;
Up_Down = 0;
Left_Right = 0;
Crop_left = 1;
Crop_right = 10;
Crop_down = 1;
Crop_up = 10;
intermode = 1;
switch (mode)
{
case Linear_Trans:
printf("请输入斜率: ");
scanf("%lf", &LinearK);
//必须用"%lf",用"%f"会出问题
printf("请输入截距: ");
scanf("%lf", &LinearB);
break;
case Exp_Trans:
printf("请输入常数项:");
scanf("%lf", &ExpC);
printf("请输入指数项:");
scanf("%lf", &ExpGamma);
break;
case Log_Trans:
printf("请输入常数c:");
scanf("%lf", &LogC);
printf("\n");
break;
case Rot_Trans:
printf("请输入旋转角度:");
scanf("%lf", &RotAngle);
printf("1:双线性插值,2:最近邻插值\n");
printf("请输入插值方式:");
scanf("%d", &intermode);
printf("\n");
break;
case Scale_Trans:
printf("请输入宽度缩放倍数:");
scanf("%lf", &WidthScale);
printf("请输入高度缩放倍数:");
scanf("%lf", &HeightScale);
break;
case Mirror_Trans:
printf("1:水平镜像 2:垂直镜像:\n");
printf("请输入镜像模式:");
scanf("%d", &MirrorMode);
break;
case HistEqual_Trans:
printf("正在进行直方图均衡\n");
break;
case MeanFilter_Trans:
printf("请输入均值滤波卷积模板大小\n");
scanf("%d", &template_size);
printf("正在进行计算...\n");
break;
case RGBToGray_Trans:
printf("1:最大值法 2:平均值法 3:加权平均法\n");
printf("请输入转换方法:");
scanf("%d", &trans_mode);
printf("正在进行彩色转灰度计算...\n");
break;
case MidFilter_Trans:
printf("请输入中值滤波模板大小\n");
scanf("%d", &template_size);
printf("正在进行计算...\n");
break;
case SpatialFilter_Trans:
printf("请输入空域滤波类型\n");
printf("1:加权平均 2:基本高通滤波\n");
printf("3:Prewitt梯度算子,垂直方向 4:Prewitt梯度算子,水平方向\n");
printf("5:Sobel梯度算子,垂直方向 6:Sobel梯度算子,水平方向\n");
printf("7: Laplace算子\n");
scanf("%d", &Spatial_filtermode);
printf("正在进行计算...\n");
break;
case DFTToImage_Trans:
printf("正在进行离散傅里叶变换计算...\n");
break;
case DCTToImage_Trans:
printf("正在进行DCT计算...\n");
break;
case DCT_And_IDCT_Trans:
printf("正在进行DCT计算...\n");
break;
case FreqFilter_Trans:
printf("1:理想高低通 2:巴特沃斯 \n");
printf("3:指数滤波 4:高斯滤波 \n");
printf("5:梯形滤波 \n");
printf("请输入滤波器类型:");
scanf("%d", &Freq_filter_class);
printf("请输入滤波器模式:");
printf("1:低通滤波 2:高通滤波 \n");
scanf("%d", &Freq_Filter_Mode);
if (Freq_filter_class == 2 || Freq_filter_class == 3)
{
printf("请输入滤波器阶数:");
scanf("%d", &Freq_n);
}
printf("请输入滤波器截止频率:");
scanf("%lf", &D0);
if (Freq_filter_class == 5)
{
printf("梯形滤波器的过零频率应大于截止频率,\n");
printf("若过零频率小于截止频率,则二者互换\n");
printf("请输入过零频率:");
scanf("%lf", &D1);
}
printf("正在进行频域滤波...\n");
break;
case ImageMove_Trans:
printf("请输入水平移动位数,向左为负,向右为正:");
scanf("%d", &Left_Right);
printf("请输入垂直移动位数,向下为负,向上为正:");
scanf("%d", &Up_Down);
break;
case ImageCrop_Trans:
printf("请输入裁剪图像左边界:");
scanf("%d", &Crop_left);
printf("请输入裁剪图像右边界:");
scanf("%d", &Crop_right);
printf("请输入裁剪图像下边界:");
scanf("%d", &Crop_down);
printf("请输入裁剪图像上边界:");
scanf("%d", &Crop_up);
break;
default:
printf("程序已退出!\n");
getchar();
system("pause");
return 0;
}
pfout = fopen(file_out, "wb");
if (pfout == NULL)
{
printf("建立文件失败!\n");
getchar();
system("pause");
return 0;
}
/**********************************读取图片***********************************/
{
fseek(pfin, 0L, SEEK_SET);
fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, pfin);
fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, pfin);
height = infoHeader.biHeight;
width = infoHeader.biWidth;
size = width * height;
}
/************************对于某些操作,需要更改内存*****************************/
{
if (mode == Rot_Trans)
{
//图像旋转改内存
WidthScale = (abs(cos(RotAngle / 180 * PI))*width + abs(sin(RotAngle / 180 * PI))*height) / (width + 0.0);
HeightScale = (abs(cos(RotAngle / 180 * PI))*height + abs(sin(RotAngle / 180 * PI))*width) / (height + 0.0);
}
if (mode == ImageCrop_Trans)
{
WidthScale = (Crop_right - Crop_left + 1.0) / (width + 0.0);
HeightScale = (Crop_up - Crop_down + 1.0) / (height + 0.0);
if (Crop_left<1 || Crop_right>width || Crop_down<1 || Crop_up>height)
{
printf("裁剪区域大于原图像!\n");
getchar();
system("pause");
return 0;
}
if (Crop_left >= Crop_right)
{
printf("右边界必须大于左边界!\n");
getchar();
system("pause");
return 0;
}
if (Crop_down >= Crop_up)
{
printf("上边界必须大于下边界!\n");
getchar();
system("pause");
return 0;
}
}
}
/**************************输入数据合法性判断**********************
没有合适的资源?快使用搜索试试~ 我知道了~
数字图像处理各种算法 C语言实现
共65个文件
tlog:19个
ipch:8个
pdb:6个
需积分: 46 128 下载量 140 浏览量
2018-12-08
16:14:13
上传
评论 17
收藏 76.76MB RAR 举报
温馨提示
包括图像空域滤波、频域滤波、几何变换(旋转、缩放、裁剪、镜像、平移)、傅里叶变换、余弦变换等等算法
资源推荐
资源详情
资源评论
收起资源包目录
image_test1.rar (65个子文件)
image_test1
.vs
image_test1
v15
Browse.VC.db 41.89MB
Solution.VC.db 372KB
.suo 77KB
ipch
AutoPCH
a0f1fa04430cab65
SPATIALFILTERING.ipch 44.44MB
eebd00148f5a872e
READ_IMAGE.ipch 65.94MB
8c7c64b799a6e370
IMAGE_TEST1.ipch 40.94MB
fd68c4f233e24ed2
GRAY.ipch 44.38MB
e9af32aaa836a557
GRAY_ENHANCE.ipch 44.38MB
3bf1d8971df8d01b
IMAGE_TEST1.ipch 44.5MB
b5e694f83c549983
MAIN_HEAD.ipch 44.38MB
e8ce77ca57a86b3b
IMAGE_TEST1.ipch 44.31MB
image_test1.sln 1KB
image_test1
image_test1.cpp 14KB
gray_enhance.h 24KB
image_test1.vcxproj.user 165B
FrequencyFiltering.h 20KB
SpatialFiltering.h 18KB
image_test1.vcxproj.filters 1KB
x64
Release
image_test1.obj 355KB
image_test1.Build.CppClean.log 1KB
image_test1.log 384B
image_test1.tlog
image_test1.write.1u.tlog 21KB
CL.write.1.tlog 490B
CL.read.1.tlog 26KB
image_test1.lastbuildstate 221B
CL.command.1.tlog 730B
link.write.1.tlog 478B
link.command.1.tlog 1KB
link.read.1.tlog 4KB
vc141.pdb 156KB
Debug
image_test1.obj 85KB
image_test1.Build.CppClean.log 1KB
image_test1.log 4KB
image_test1.tlog
CL.write.1.tlog 640B
CL.read.1.tlog 26KB
image_test1.lastbuildstate 219B
CL.command.1.tlog 794B
link.write.1.tlog 612B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
vc141.idb 235KB
vc141.pdb 132KB
main_head.h 17KB
image_test1.vcxproj 6KB
Debug
image_test1.obj 44KB
image_test1.log 1KB
image_test1.tlog
CL.write.1.tlog 616B
CL.read.1.tlog 26KB
image_test1.lastbuildstate 221B
CL.command.1.tlog 808B
link.write.1.tlog 580B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
vc141.idb 419KB
vc141.pdb 428KB
x64
Release
image_test1.iobj 318KB
image_test1.ipdb 57KB
image_test1.pdb 612KB
image_test1.exe 63KB
Debug
image_test1.pdb 452KB
image_test1.exe 81KB
image_test1.ilk 427KB
Debug
image_test1.pdb 628KB
image_test1.exe 42KB
image_test1.ilk 484KB
共 65 条
- 1
资源评论
txdt
- 粉丝: 3
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功