7. 对一幅灰度图像进行离散余弦变换,用图像的形式显示其变换系数。变换后去掉小于系数最大值60% 、80%、90%的系数,在进行反变换,观察变换前后图像区别。
来源:互联网 发布:淘宝刷购物车 编辑:程序博客网 时间:2024/06/06 13:02
#include <cxcore.h>#include <cv.h>#include <highgui.h>void cvDcT(CvArr * src_arr, CvArr * dst_arr){ CvMat * tmp; CvMat q1stub, q2stub; CvMat q3stub, q4stub; CvMat d1stub, d2stub; CvMat d3stub, d4stub; CvMat * q1, *q2, *q3, *q4; CvMat * d1, *d2, *d3, *d4; CvSize size = cvGetSize(src_arr); CvSize dst_size = cvGetSize(dst_arr); int cx, cy; if (dst_size.width != size.width || dst_size.height != size.height){ cvError(CV_StsUnmatchedSizes, "cvShiftDFT", "Source and Destination arrays must have equal sizes", __FILE__, __LINE__); } if (src_arr == dst_arr){ tmp = cvCreateMat(size.height / 2, size.width / 2, cvGetElemType(src_arr)); } cx = size.width / 2; cy = size.height / 2; q1 = cvGetSubRect(src_arr, &q1stub, cvRect(0, 0, cx, cy)); q2 = cvGetSubRect(src_arr, &q2stub, cvRect(cx, 0, cx, cy)); q3 = cvGetSubRect(src_arr, &q3stub, cvRect(cx, cy, cx, cy)); q4 = cvGetSubRect(src_arr, &q4stub, cvRect(0, cy, cx, cy)); d1 = cvGetSubRect(dst_arr, &d1stub, cvRect(0, 0, cx, cy)); d2 = cvGetSubRect(dst_arr, &d2stub, cvRect(cx, 0, cx, cy)); d3 = cvGetSubRect(dst_arr, &d3stub, cvRect(cx, cy, cx, cy)); d4 = cvGetSubRect(dst_arr, &d4stub, cvRect(0, cy, cx, cy)); if (src_arr != dst_arr){ if (!CV_ARE_TYPES_EQ(q1, d1)){ cvError(CV_StsUnmatchedFormats, "cvShiftDFT", "Source and Destination arrays must have the same format", __FILE__, __LINE__); } cvCopy(q3, d1, 0); cvCopy(q4, d2, 0); cvCopy(q1, d3, 0); cvCopy(q2, d4, 0); } else{ cvCopy(q3, tmp, 0); cvCopy(q1, q3, 0); cvCopy(tmp, q1, 0); cvCopy(q4, tmp, 0); cvCopy(q2, q4, 0); cvCopy(tmp, q2, 0); }}int main(int argc, char ** argv){ const char* filename = argc >= 2 ? argv[1] : "2.bmp"; IplImage * im; IplImage * realInput; IplImage * imaginaryInput; IplImage * complexInput; int dft_M, dft_N; CvMat* dft_A, tmp; IplImage * image_Re; IplImage * image_Im; double m, M; im = cvLoadImage("6013202130.bmp", CV_LOAD_IMAGE_GRAYSCALE); if (!im) return -1; realInput = cvCreateImage(cvGetSize(im), IPL_DEPTH_64F, 1); imaginaryInput = cvCreateImage(cvGetSize(im), IPL_DEPTH_64F, 1); complexInput = cvCreateImage(cvGetSize(im), IPL_DEPTH_64F, 2); cvScale(im, realInput, 1.0, 0.0); cvZero(imaginaryInput); cvMerge(realInput, imaginaryInput, NULL, NULL, complexInput); dft_M = cvGetOptimalDFTSize(im->height - 1); dft_N = cvGetOptimalDFTSize(im->width - 1); dft_A = cvCreateMat(dft_M, dft_N, CV_64FC2); image_Re = cvCreateImage(cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1); image_Im = cvCreateImage(cvSize(dft_N, dft_M), IPL_DEPTH_64F, 1); cvGetSubRect(dft_A, &tmp, cvRect(0, 0, im->width, im->height)); cvCopy(complexInput, &tmp, NULL); if (dft_A->cols > im->width) { cvGetSubRect(dft_A, &tmp, cvRect(im->width, 0, dft_A->cols - im->width, im->height)); cvZero(&tmp); } cvDFT(dft_A, dft_A, CV_DXT_FORWARD, complexInput->height); cvNamedWindow("原图6013202130", 0); cvNamedWindow("变换后", 0); cvShowImage("原图6013202130", im); cvSplit(dft_A, image_Re, image_Im, 0, 0); cvPow(image_Re, image_Re, 2.0); cvPow(image_Im, image_Im, 2.0); cvAdd(image_Re, image_Im, image_Re, NULL); cvPow(image_Re, image_Re, 0.5); cvAddS(image_Re, cvScalarAll(1.0), image_Re, NULL); cvLog(image_Re, image_Re); cvDcT(image_Re, image_Re); cvMinMaxLoc(image_Re, &m, &M, NULL, NULL, NULL); cvScale(image_Re, image_Re, 1.0 / (M - m), 1.0*(-m) / (M - m)); cvShowImage("变换后", image_Re); cvWaitKey(-1); return 0;}
0 0
- 7. 对一幅灰度图像进行离散余弦变换,用图像的形式显示其变换系数。变换后去掉小于系数最大值60% 、80%、90%的系数,在进行反变换,观察变换前后图像区别。
- 6. 对一幅灰度图像进行离散傅里叶变换,用图像的形式显示其(中心化后的)频谱。改变频谱,在进行 反变换,观察变换前后的区别
- 8. 对一幅灰度图像进行灰度对数变换。观察变换前后高、低灰度位置的变化并解释原因。
- 图像的正交变换---离散余弦变换
- 图像离散余弦变换和反变换
- 图像的离散余弦变换
- 离散余弦变换后的图像
- 图像离散余弦变换
- 图像变换(离散余弦变换DCT)
- opencv2灰度图像的变换
- 图像简单的灰度变换
- 利用Opencv进行图像灰度变换处理
- 图像余弦变换
- Matlab 图像灰度变换
- mtalab图像灰度变换
- MATLAB分析图像的离散余弦变换(DCT)
- 小波变换系数的含义
- 对图像进行二维傅立叶变换的意义
- Eclipse自动补全代码
- 5. 把一幅彩色图像的H、S、I分量单独显示。
- android Studio ddms中emulator control不能用的问题
- Run-Time Check Failure #2分析
- 6. 对一幅灰度图像进行离散傅里叶变换,用图像的形式显示其(中心化后的)频谱。改变频谱,在进行 反变换,观察变换前后的区别
- 7. 对一幅灰度图像进行离散余弦变换,用图像的形式显示其变换系数。变换后去掉小于系数最大值60% 、80%、90%的系数,在进行反变换,观察变换前后图像区别。
- 8. 对一幅灰度图像进行灰度对数变换。观察变换前后高、低灰度位置的变化并解释原因。
- java-第1个网页
- 9. 对一幅对比度差的图像进行灰度均衡化。
- 10. 对一幅灰度图像进行均值滤波、中值滤波。(自己可适当对原图像增加高频噪声)
- 11. 对一幅灰度图像增加高频噪声,再对其进行频域低通滤波。
- 12. 对一幅灰度图像用最大类间方差法求阈值,并对其进行二值化。
- 13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。
- 14. 对一幅二值图像进行膨胀、腐蚀、开运算和闭运算,观察效果。