使用C语言完成图像处理

weixin_36184522 2019-02-11 08:24:58
图片格式为raw,所以比较麻烦
这是图片的连接:https://pan.baidu.com/s/1P1g2HXQBQNNRXL5KXM-Fpw
1. Arithmetic operations (10 points)
Write a program for subtraction of lena_edit.raw from lena.raw. Export lena_subtraction.raw as an
output file.
2. Point processing (10 points)
Write a program for generating a negative version of lena.raw. Export lena_negative.raw as an output
file.
3. Geometric transformations (15 points)
Write a program for translating lena.raw by 5 pixels for both x- and y- direction. Export
lena_translation.raw as an output file.
4. Histogram processing (20 points)
Write a program for histogram equalization by taking lena.raw as an input. Export lena_histequal.raw as
an output file.



#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


void Read2DUCharImg(char *filename, unsigned char **img, int dim_x, int dim_y) {
FILE *fp;
int i;

fp = fopen(filename, "rb");

for (i = 0; i < dim_y; i++)
fread(img[i], sizeof(unsigned char), dim_x, fp);
fclose(fp);
}

void Write2DUCharImg(char *filename, unsigned char **img, int dim_x, int dim_y)
{
int i, k;
FILE *fp;
fp = fopen(filename, "wb");

for (i = 0; i < dim_y; i++)
fwrite(img[i], sizeof(unsigned char), dim_x, fp);
fclose(fp);
}

unsigned char **UCalloc2d(int i_size, int j_size)
{
unsigned char **array;
int i;

array = (unsigned char **)calloc(i_size, sizeof(unsigned char *));

for (i = 0; i < i_size; i++)
array[i] = (unsigned char *)calloc(j_size, sizeof(unsigned char));

return(array);
}

void UCfree2d(unsigned char **array, int i_size)
{
int i;

for (i = 0; i < i_size; i++)
free(array[i]);

free(array);
}

float **Falloc2d(int i_size, int j_size)
{
float **array;
int i;

array = (float **)calloc(i_size, sizeof(float *));

for (i = 0; i < i_size; i++)
array[i] = (float *)calloc(j_size, sizeof(float));

return(array);
}

void Ffree2d(float **array, int i_size)
{
int i;

for (i = 0; i < i_size; i++)
free(array[i]);

free(array);
}


int main(int argc, char *argv[]) {
int function_num;

unsigned char **inputimg, **outputimg, **tempimg;
char inputfilename[100], outputfilename[100];
FILE *fp;

int dim_x, dim_y;
int i, j;
int num_intensity_level = 256;
int max_intensity = num_intensity_level - 1;

int* histogram_bins;
float* histogram;
float* cumul_hist;
int* trans_func;

float **gauss; // gaussian kernel
float **laplacian; // laplacian kernel
int smooth_kernel_size = 5;
int laplacian_kernel_size = 3;

float sigma = 2.0;
float K = 25.0 / 15.0;

dim_x = 512; dim_y = 512;

inputimg = UCalloc2d(dim_y, dim_x);
outputimg = UCalloc2d(dim_y, dim_x);
tempimg = UCalloc2d(dim_y, dim_x);

strcpy(inputfilename, "lena.raw");

strcpy(outputfilename, "lena_output.raw");

histogram_bins = (int*)calloc(num_intensity_level, sizeof(int));
histogram = (float*)calloc(num_intensity_level, sizeof(float));
cumul_hist = (float*)calloc(num_intensity_level, sizeof(float));
trans_func = (int*)calloc(num_intensity_level, sizeof(int));

gauss = Falloc2d(smooth_kernel_size, smooth_kernel_size);
laplacian = Falloc2d(laplacian_kernel_size, laplacian_kernel_size);

// histogram
for (i = 0; i < num_intensity_level; i++) {
histogram_bins[i] = 0;
cumul_hist[i] = 0.0;
trans_func[i] = 0.0;

// Add histogram computation and processing
}

// Gaussian kernel
// To do: Set Gaussian kernel values

// Laplacian kernel
// To do: Set Laplacian kernel values

// read input image
Read2DUCharImg(inputfilename, inputimg, dim_x, dim_y);

// Choose function
function_num = 1;

switch (function_num)
{
case 1: for (i = 0; i < dim_x; i++) {
for (j = 0; j < dim_y; j++) {
outputimg[i][j] = inputimg[i][j] - tempimg[i][j];

}
}
break;
case 2:
// Call function 2
break;
case 3:
// Call function 3
break;
default:
break;
}


Write2DUCharImg(outputfilename, outputimg, dim_x, dim_y);

UCfree2d(inputimg, dim_y);
UCfree2d(outputimg, dim_y);
UCfree2d(tempimg, dim_y);

free(histogram_bins);
free(histogram);
free(cumul_hist);
free(trans_func);

Ffree2d(gauss, smooth_kernel_size);
Ffree2d(laplacian, laplacian_kernel_size);

return EXIT_SUCCESS;
}











...全文
444 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsxyhelu2015 2019-02-14
  • 打赏
  • 举报
回复
请说明一下,这个问题来自哪里?这样对于解答问题将很有帮助。
weixin_36184522 2019-02-11
  • 打赏
  • 举报
回复
我自己尝试在写第一部分,卡在temping没有办法定义了头疼
本书是计算机图形学领域的经典著作。本书由基础知识、用户界面、模型定义和图像合成四个部分组成,包括srgp的编程、画二维图元的基本光栅图形学算法、图形硬件、几何变换、三维空间的观察、对象的层次结构和sphigs系统、输入设备、交互技术与交互任务、对话设计、用户界面软件、实体造型、消色光与彩色光、可视图像的真实性、可见面判定、光照模型与光照计算、图像处理与存储、高级光栅图形体系结构、高级几何与光栅算法、高级建模技术和动画等内容。    本书内容全面,涉及图形学的各个领域,可以作为计算机专业本科生和研究生的教材,同时也可供相关技术人员阅读。 这是计算机图形学领域的一部经典之作,作者foley、van dam等是国际图形学界的著名学者、学术带头人,而且本书英文版自出版以来,一直是各国大学计算机图形学课程的主要教科书。来自清华大学、北京大学、中国科学院计算技术研究所、中国科学院软件研究所的多位图形学领域的专家和精英花费了大量的时间和精力进行翻译,最终完成了这本中文版。   本书由基础知识、用户界面、模型定义和图像合成四个部分组成,内容覆盖了日趋成熟的计算机图形学领域各个方面,包括二维、三维图形学的数学基础,重要算法,光栅图形硬件和软件,交互技术及用户界面软件,真实感图形学,高级建模技术 (分形、体绘制等),图像处理和存储,以及动画等。此外,书中包括了大量习题和参考文献,提供了大量的用c语言编写的实现算法的程序。   本书是高等院校计算机专业本科生、研究生计算机图形学课程的理想教材,是相关领域专业人员开展研究工作的优秀参考书。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧