精华内容
下载资源
问答
  • 数字图像处理实验一

    2019-01-05 23:28:27
    %读入1幅512*512的灰度图像,随即选取1000个像素,将其置0,计算置0后图像与原始图像间的峰值信噪比 % 读入图像函数- imread() % 随即生成函数- randperm() % 自定义PSNR函数 im = imread('11-Mary.bmp'); [M,N] =...
    %读入1幅512*512的灰度图像,随即选取1000个像素,将其置0,计算置0后图像与原始图像间的峰值信噪比
    
    % 读入图像函数- imread()
    % 随即生成函数- randperm()
    % 自定义PSNR函数
    
    im = imread('11-Mary.bmp');
    [M,N] = size(im);
    P = randperm(M*N);
    P = P(1:1000);
    im1 = im;
    im1(P) = 0;
    subplot(121)
    imshow(im)
    subplot(122)
    imshow(im1)
    %
    psnr = PSNR(im,im1);
    fprintf('PSNR = %.2f dB\n',psnr);
    function psnr = PSNR(x,y)
    x = double(x);
    y = double(y);
    cnt = length(x(:));
    mse = sum((x(:)-y(:)).^2)/cnt;
    psnr = 10*log10(255^2/mse);
    end

     

    展开全文
  • 个人实验记录 | 数字图像处理实验一代码 // Test1View.cpp: CTest1View 类的实现 // #include "pch.h" #include "framework.h" // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的 // ATL 项目中进行...

    个人实验记录 | 数字图像处理实验一代码

    
    // Test1View.cpp: CTest1View 类的实现
    //
    
    #include "pch.h"
    #include "framework.h"
    // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
    // ATL 项目中进行定义,并允许与该项目共享文档代码。
    #ifndef SHARED_HANDLERS
    #include "Test1.h"
    #endif
    
    #include "Test1Doc.h"
    #include "Test1View.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // CTest1View
    
    IMPLEMENT_DYNCREATE(CTest1View, CView)
    
    BEGIN_MESSAGE_MAP(CTest1View, CView)
    	// 标准打印命令
    	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
    	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
    	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
    	ON_COMMAND(ID_FILE_OPEN, &CTest1View::OnFileOpen)
    	ON_COMMAND(ID_FILE_SAVE_AS, &CTest1View::OnFileSaveAs)
    END_MESSAGE_MAP()
    
    // CTest1View 构造/析构
    
    CTest1View::CTest1View() noexcept
    {
    	// TODO: 在此处添加构造代码
    	m_pImage = NULL;
    	m_Nsize = 0;
    	m_Msize = 0;
    }
    
    CTest1View::~CTest1View()
    {
    	if (m_pImage != NULL)
    		delete[] m_pImage;
    }
    
    BOOL CTest1View::PreCreateWindow(CREATESTRUCT& cs)
    {
    	// TODO: 在此处通过修改
    	//  CREATESTRUCT cs 来修改窗口类或样式
    
    	return CView::PreCreateWindow(cs);
    }
    
    // CTest1View 绘图
    
    void CTest1View::OnDraw(CDC* pDC)
    {
    
    	CTest1Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    	unsigned char grey;
    	unsigned char red,green,blue;
    	
    	for (int i = 0; i < m_Nsize; i++)
    		for (int j = 0; j < m_Nsize; j++)
    		{
    			
    			
    			//printf("%u",grey);
    			//CString debugstr = CMapStringToString(grey);
    			//OutputString(debugstr);
    
    			/*grey = *(m_pImage + m_Nsize*i + j);
    			pDC->SetPixelV(10 + j, 10 + i, RGB(grey, grey, grey));*/
    			blue = *(m_pImage + m_Nsize * i * 3 + j * 3);
    			green = *(m_pImage + m_Nsize * i * 3 + j * 3 + 1);
    			red = *(m_pImage + m_Nsize * i * 3 + j * 3 + 2);
    		
    			
    			pDC->SetPixelV(10 + j, 10 + i, RGB(blue, green, red));
    			
    		}
    }
    
    
    // CTest1View 打印
    
    //void CTest1View::OnInitialUpdate()
    //{
    //	CScrollView::OnInitialUpdate();
    //
    //	//	CSize sizeTotal;
    //		// TODO: calculate the total size of this view
    //	//	sizeTotal.cx = sizeTotal.cy = 100;
    //	//	SetScrollSizes(MM_TEXT, sizeTotal);
    //	CSize sizeTotal(3000, 4000); // 3-by-4 cm
    //	CSize sizeLine = CSize(sizeTotal.cx / 100, sizeTotal.cy / 100);
    //	SetScrollSizes(MM_TEXT, sizeTotal, sizeTotal, sizeLine);
    //	return;
    //}
    BOOL CTest1View::OnPreparePrinting(CPrintInfo* pInfo)
    {
    	// 默认准备
    	return DoPreparePrinting(pInfo);
    }
    
    void CTest1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    	// TODO: 添加额外的打印前进行的初始化过程
    }
    
    void CTest1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    	// TODO: 添加打印后进行的清理过程
    }
    
    
    // CTest1View 诊断
    
    #ifdef _DEBUG
    void CTest1View::AssertValid() const
    {
    	CView::AssertValid();
    }
    
    void CTest1View::Dump(CDumpContext& dc) const
    {
    	CView::Dump(dc);
    }
    
    CTest1Doc* CTest1View::GetDocument() const // 非调试版本是内联的
    {
    	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTest1Doc)));
    	return (CTest1Doc*)m_pDocument;
    }
    #endif //_DEBUG
    
    
    // CTest1View 消息处理程序
    
    
    void CTest1View::OnFileOpen()
    {
    	CFileDialog dlg(TRUE, _T("raw"), _T("*.raw"));
    	CFile file;
    	CImage image;
    	image.Load(dlg.GetPathName());
    	if (dlg.DoModal() == IDOK) {
    		VERIFY(file.Open(dlg.GetPathName(), CFile::modeRead));
    	}
    
    	DWORD ndwSizeRaw = (DWORD)file.GetLength();
    	m_pImage = new unsigned char[ndwSizeRaw];
    	file.Read(m_pImage, ndwSizeRaw);
    	file.Close();
    	double len = double(ndwSizeRaw) / 3;
    	m_Nsize = (int)sqrt(len);
    	/*m_Nsize = 752;
    	m_Msize = 600;*/
    	/*m_Nsize = (int)sqrt(double(ndwSizeRaw));
    	m_Msize = m_Nsize;
    	
    	while (m_Msize * m_Nsize != int(ndwSizeRaw) || m_Nsize % 4 != 0)
    	{
    		m_Nsize += 1;
    		m_Msize = int(int(ndwSizeRaw) / m_Nsize);
    	}*/
    	TRACE("N=%d, M=%d\n", m_Nsize,m_Msize);
    
    	Invalidate();
    }
    
    
    void CTest1View::OnFileSaveAs()
    {
    	// TODO: 在此添加命令处理程序代码
    	DWORD ndwSizeRaw = m_Nsize * m_Msize;
    	WriteRawFile(m_pImage, ndwSizeRaw);
    
    	Invalidate();
    
    	return;
    }
    
    BOOL CTest1View::WriteRawFile(LPVOID lpvBits, DWORD ndwSizeRaw)
    {
    	CFileDialog dlg(FALSE, _T("raw"), _T("*.raw"));
    	CFile RawFile;
    	if (dlg.DoModal() == IDOK) {
    		VERIFY(RawFile.Open(dlg.GetPathName(), CFile::modeCreate | CFile::modeWrite));
    	}
    	try {
    		RawFile.Write((LPVOID)lpvBits, ndwSizeRaw);
    	}
    	catch (CException* pe) {
    		pe->Delete();
    		AfxMessageBox(_T("write error!"));
    		RawFile.Close();
    		return FALSE;
    	}
    	RawFile.Close();
    	return TRUE;
    
    	return 0;
    }
    
    void OutputString(CString msg)
    {
    	if (msg.IsEmpty() == false)
    	{
    		TRACE(msg);
    		TRACE("\n");
    	}
    }
    
    展开全文
  • 纯C语言写的彩色图像转灰度图像,图像格式bitmap24位,编译器VS2010,注释详尽,命名易懂,数字图像处理实验代码
  • 实验一 图像的基本操作和基本统计指标计算 实验目的 熟悉MATLAB图像处理工具箱在掌握MATLAB基本操作的基础上本课程主要依靠图像处理工具箱验证和设计图像处理算法对于初学者来说勤学多练熟悉MATLAB图像处理工具箱也...
  • 实验一熟悉 Matlab 图像处理工具箱 一实验目的 1.熟悉 matlab 图像处理工具箱 2.了解图像处理的函数及使用方法 3.学会简单的图像处理方法 二实验原理 1.二值图像 二值图像是一种简单的图像格式 0表示黑色像素点 255 ...
  • 数字图像处理实验一,基于MFC编写,可打开并显示一幅位图文件,可查看其文件长度、偏移量、宽度、高度及像素位数等信息。已通过调试运行。对初学者很有帮助的。
  • 1) 熟悉参考程序DISP.c,熟悉C语言。 2) 输入图象显示源程序DISP.c,建立C语言程序调试环境。 3) 在计算机屏幕上显示指定的图象A2,B2。
  • 数字图像处理实验一 直方图及均衡化灰度拉伸 内含实验报告及源代码。
  • 1.熟练掌握matlab基本操作:对图像进行读、写和显示;图像的基本信息;灰度平均值等。 2.掌握用matlab进行图像旋转、裁剪等操作; 3.熟悉matlab图像处理工具箱的使用方法
  • 实验一包含两个小实验:图像加载和显示、图像合成。用c++、opencv写的。运行代码时注意所选图像的大小和格式
  • 实验要求 1、直方图(读入你自己的图片并显示...用大小为3X3,5X5,7X7的统计滤波(取第8顺位)对其进行去噪处理,并将它们绘制在同幅figure中进行比较; 4、对你的图像进行傅里叶变换并直接显示; 二、实验代...

    一、实验要求
    1、直方图(读入你自己的图片并显示; 用默认、条形图、杆状图及曲线四种方式显示直方图,并将它们绘制在同一幅figure中进行比较)
    2、九种默认的滤波器并显示结果;
    3、对你自己的图添加噪声水平为0.15的椒盐噪声;用大小为3X3,5X5,7X7的统计滤波(取第8顺位)对其进行去噪处理,并将它们绘制在同一幅figure中进行比较;
    4、对你的图像进行傅里叶变换并直接显示;

    二、实验代码
    (1)

    %%
    %
    I=imread('hei.png');
    I=rgb2gray(I);
    %im2uint8(mat2gray(log(1+double(I))));
    
    h=imhist(I);
    subplot(2,2,1),imhist(I),title('默认图');
    subplot(2,2,2),plot(h),title('曲线图');
    subplot(2,2,3),stem(h),title('杆状图');
    subplot(2,2,4),bar(h),title('条形图');
    

    (2)

    %%
    %九种滤波器
    I=imread('hei.png');
    imshow(I),title('原图'),figure;
    
    L1=imfilter(I,fspecial('average',3));
    subplot(3,3,1),imshow(L1),title('average');
    
    L2=imfilter(I,fspecial('disk',5));
    subplot(3,3,2),imshow(L2),title('disk');
    
    L3=imfilter(I,fspecial('gaussian'));
    subplot(3,3,3),imshow(L3),title('gaussian');
    
    L4=imfilter(I,fspecial('laplacian'));
    subplot(3,3,4),imshow(L4),title('laplacian');
    
    L5=imfilter(I,fspecial('log'));
    subplot(3,3,5),imshow(L5),title('log');
    
    L6=imfilter(I,fspecial('prewitt'));
    subplot(3,3,6),imshow(L6),title('prewitt');
    
    L7=imfilter(I,fspecial('motion'));
    subplot(3,3,7),imshow(L7),title('motion');
    
    L8=imfilter(I,fspecial('sobel'));
    subplot(3,3,8),imshow(L8),title('sobel');
    
    L9=imfilter(I,fspecial('unsharp'));
    subplot(3,3,9),imshow(L9),title('unsharp');
    

    (3)

    %%
    %
    I=imread('hei.tif');
    figure,imshow(I),title('原图');
    %%
    %
    I2=imnoise(I,'salt & pepper',0.05);%%注意中间空格,不然会错报
    figure,imshow(I2),title('椒盐噪声')
    %%
    %
    I=imread('hei.tif');
    figure;
    subplot(2,2,1),set(gca,'position'),imshow(I),title('原图');
    K = imfilter(I2,fspecial('average',3));
    subplot(2,2,2),set(gca,'position'),imshow(K),title('3*3');
    L = imfilter(I2,fspecial('average',5));
    subplot(2,2,3),set(gca,'position'),imshow(L),title('5*5');
    M = imfilter(I2,fspecial('average',7));
    subplot(2,2,4),set(gca,'position'),imshow(M),title('7*7');
    

    (4)

    %%傅里叶变换
    %%A基本操作
    I = imread('hei.tif');
    imshow(I);
    title('源图像');
    J1=rgb2gray(I);
    J2= fft2(J1);
    figure, imshow(J2);
    title('傅里叶变换');
    %%频移
    JSh = fftshift(J2);
    figure, imshow(JSh);
    title('傅里叶变换频移');
    %%直接傅立叶反变换
    Ji=ifft2(J2);
    figure, imshow(Ji/256);
    title('直接傅立叶变换');
    %%幅度
    JA=abs(J2);
    iJA=ifft2(JA);
    figure, imshow(JA/256);
    title('幅度博立叶反变换');
    %%相位
    JP=angle(J2);
    iJP=ifft2(JP);
    figure, imshow(abs(iJP)* 100);
    title('相位傅立叶反变换');
    
    
    展开全文
  • 对直方图进行处理,使用MATLAB自带的IPT函数和自己写的程序
  • 首先是新建个MFC(Microsoft Framework Classes)应用程序,在应用程序类型中选择多多个文档(就是可以同时打开多个文档),多选项卡式文档(类似于Word的选项卡),项目类型选择MFC标准(还不懂有什么区别),最后...

    因为C/C++在去年没有学好,今年学习Opencv就遇到了很多的问题。

    1. 首先是新建一个MFC(Microsoft Framework Classes)应用程序,在应用程序类型中选择多多个文档(Multiple-Document-interface就是可以同时打开多个文档),多选项卡式文档(类似于Word的选项卡),项目类型选择MFC标准(还不懂有什么区别),最后基类选择CScrollView(就是可以滚动的意思)

    2. 然后我们就可以看到MFC文件中有四个文件夹,比较相关的就是头文件(.h)和源文件(.cpp)。我们的文件夹名字+Doc.h/.cpp,直接名字.cpp以及文件夹名字+View.h/.cpp。其它的有MainFrm.h/.cpp(主程序框架)、ChildFrm.h/.cpp(子程序框架)、stadfx.h/.cpp(标准应用程序框架扩展)。在这些的头文件中(除了直接名字的只含重写和实现)中又分为特性、操作、重写、实现、生成消息映射函数。

    3. 此时还是实验一001部分。打开资源视图可以看到不同类型的类视图。最后就是在“项目”->“类向导”->“…Doc”->“虚函数”->“OnOpenDocument”->“添加函数”。这就结束了实验一001。

    展开全文
  • 实验一 图像的基本运算一、实验目的(1)掌握点运算和代数运算的算法实现和概念(2)掌握和几何运算的算法实现和概念(2)掌握灰度变换和几何变换的基本方法(3)理解图像灰度直方图的概念二、实验内容(1)任意选择...
  • 实验1.1:图像加载、显示 利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试; Code %读取一般的图片用imread即可,动态图用后半部分代码...
  • Experiment Purpose 1 Be familiar with the commonly used image file format and format conversion 2 Familiar with images of the matrix display method Gray black and white index color ...
  • 基于Matlab的图像灰度级修正DIP实验1:图像灰度级修正实验目的实验内容参考代码1、调用Matlab自带函数编写2、使用自己编写的线性拉伸函数、幂律变换函数、绘制直方图函数、均衡函数实验结果![图像灰度级修正]...
  • // Created by liuzhe on 17/3/30. %-- 17-3-27 上午7:44 --% %-- 17-3-27 上午7:49 --% I_huidu=imread('pout.tif'); I_erzhi=inread('circles.png'); I_erzhi=imread('circles.png');...I_erzhi2=imread('blobs.png...
  • 实验一图像打开、保存与显示 一、实验目的: 掌握数字图像的基本类型及其表示。熟悉Matlab软件环境,了解Matlab中对图像数据的读入、显示和输出等操作,实现图像文件的打开、显示与保存功能。 二、实验环境: ...
  • 实验1.1:图像加载、显示 利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试; 实验1.2:图像合成 现有一张4通道透明图像a.png...
  • 请参考本实验手册,实现个在视频叠加字幕的程序。鼠标点击屏幕,关闭或打开字幕。 # 实现读取视频文件,显示视频文件 # 实现鼠标点击开关字幕 import cv2 cap = cv2.VideoCapture('vtest.avi') # 打开视频文件 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,352
精华内容 540
关键字:

数字图像处理实验一