图像锐化

guojingguan 2012-11-14 10:14:41
void Prewitt32(unsigned long *imagedata,int height,int width)
{
unsigned long* tempdataGx=(unsigned long*)malloc(height*width*sizeof(unsigned long));
unsigned long* tempdataGy=(unsigned long*)malloc(height*width*sizeof(unsigned long));
unsigned long* tempdata=(unsigned long*)malloc(height*width*sizeof(unsigned long));
int c=1;
for(int i=2;i<width-2;i++)
{
for(int j=2;j<height-2;j++)
{
tempdataGx[i*height+j]=(imagedata[(i-1)*height+j+1]
+1*imagedata[i*height+j+1]
+imagedata[(i+1)*height+j+1]
-imagedata[(i-1)*height+j-1]
-1*imagedata[i*height+j-1]
-imagedata[(i+1)*height+j-1]);
}
}
for(int i=2;i<width-2;i++)
{
for(int j=2;j<height-2;j++)
{
tempdataGy[i*height+j]=(imagedata[(i-1)*height+j-1]
+imagedata[(i-1)*height+j]
+imagedata[(i-1)*height+j+1]
-imagedata[(i+1)*height+j-1]
-imagedata[(i+1)*height+j]
-imagedata[(i+1)*height+j+1]);
}
}
for(int i=2;i<width-2;i++)
{
for(int j=2;j<height-2;j++)
{
tempdata[i*height+j]=abs(long(tempdataGx[i*height+j]))+abs(long(tempdataGy[i*height+j]));
}
}
for(int i=2;i<width-2;i++)
{
for(int j=2;j<height-2;j++)
{
imagedata[i*height+j]=tempdata[i*height+j]+imagedata[i*height+j];
}
}
printf("dd");
free(tempdataGx);
free(tempdataGy);
free(tempdata);
} 为什么我的锐化对图像都没改变 在ps里的USM锐化三个参数对应数字图像处理分别是什么
...全文
308 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujk 2013-01-21
  • 打赏
  • 举报
回复
锐化很简单,乘以一个模板而已,要进行正确的锐化,同时避免清晰的区域出现锐化过度的情况才有点意思。参见http://blog.csdn.net/zhoujk/article/details/2663359
suseyaoyao 2012-12-28
  • 打赏
  • 举报
回复
楼主你并不是用的USM算法啊,
suseyaoyao 2012-12-28
  • 打赏
  • 举报
回复
USM锐化滤镜可以再 图像边缘的两侧分别制作一条明线或暗线来调整边缘细节的对比度,使图像边缘轮廓锐化。 1进一步锐化滤镜和锐化滤镜功效相似,只是锐化效果更加强烈。该滤镜命令无参数设置对话框。 2锐化,锐化滤镜可以增加图像素之间的对比度,使图像清晰化。该滤镜命令无参数设置对话框。 3锐化边缘滤镜,可以用来锐化图像的轮廓,使不同颜色之间的分界更加明显,该滤镜命令无参数设置对话框。 USM:参数设置 数量:用于调节锐化的 程度。该值越大,锐化效果越明显。 半径:用于设置图像轮廓周围被锐化的范围,该值越大,锐化效果越明显。 阀值:用于设置锐化相邻像素必须达到的最低差值。只有对比度差值高于此值的像素才会得到锐化处理。
数字图像锐化算法研究 图像锐化(2010-08-03 16:10:31)转载▼标签: 杂谈 分类: Matlab MATLAB全称是MatrixLaboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际运用中MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的,这一特点决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而计算机对图像进行数字处理时,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像均匀采样,可得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP,GIF,HDF,JPEG,PCX,PNG, XWD,CUR,ICO等图像文件格式的读、写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作口。   数字图像处理中图像锐化的目的有两个:一是增强图像的边缘,使模糊的图像变得清晰起来;这种模糊不是由于错误操作,就是特殊图像获取方法的固有影响。二是提取目标物体的边界,对图像进行分割,便于目标区域的识别等。通过图像的锐化,使得图像的质量有所改变,产生更适合人观察和识别的图像。   数字图像的锐化可分为线性锐化滤波和非线性锐化滤波。如果输出像素是输入像素领域像素的线性组合则称为线性滤波,否则称为非线性滤波。    一、线性锐化滤波器   线性高通滤波器是最常用的线性锐化滤波器。这种滤波器必须满足滤波器的中心系数为正数,其他系数为负数。线性高通滤波器3×3模板的典型系数   如表1所示:   用线性高通滤波实现图像锐化的程序和图像如下:   i=imread('text.png'); %读入图像   g=[-1 -1 -1; -1 8-1; -1-1-1];%线性高通滤波3×3模板   h=double(i);%转化为double类型   j=conv2(h,g,'same');% 线性高通滤波进行图像滤波   subplot(1,2,1);   imshow(h);title('原始图像');   subplot(1,2,2);   imshow(j);title('滤波后图像');   二、非线性锐化滤波器   非线性锐化滤波就是使用微分对图像进行处理,以此来锐化由于邻域平均导致的模糊图像。图像处理中最常用的微分是利用图y像沿某个方向上的灰度变化率,即原图像函数的梯度。梯度定义如下:   (公式2.1)   梯度模的表达式如下:   (公式2.2)   在数字图像处理中,数据是离散的,幅值是有限的,其发生的最短距离是在两相邻像素之间。因此在数字图像处理中通常采用一阶差分来定义微分算子。   其差分形式为:   △xf=f(x+1,y)-f(x,y)   △yf=f(x,y+1)-f(x,y)   比较有名的微分滤波器算子包括Sobel 梯度算子、Prewitt 梯度算子和log算子,等等。   用Sobel 梯度算子、Prewitt 梯度算子和log算子实现图像锐化的程序和图像如下:   I=imread('coins.png');%读入图像   subplot(2,2,1),imshow(I);title('原图像');%显示原图像   H=fspecial('sobel'); %应用sobel算子锐化图像   I2=filter2(H,I); %sobel算子滤波锐化   subplot(2,2,2);imshow(I2); %显示sobel算子锐化图像   title('sobel算子锐化图像');   H=fspecial('prewitt');%应用prewitt算子锐化图像   I3=filter2(H,I);%prewitt算子滤波锐化   subplot(2,2,3);imshow(I3); %显示prewitt算子锐化图像   title('prewitt算子锐化图像');   H=fspecial('log'); %应用log算子锐化图像   I4=filter2(H,I); %log算子滤波锐化   subplot(2,2,4

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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