java数字图像处理常用算法前些时候做毕业设计 用java做的数字图像处理方面的东西 这方面的资料ms比较少 发点东西上来大家共享一下 主要就是些算法 有自己写的 有人家的 还有改人家的 有的算法写的不好 大家不要见笑
一 读取bmp图片数据
//获取待检测图像数据保存在数组 nData[] nB[]nG[]nR[]中
publicvoid getBMPImage(String source) throws Exception {clearNData();//清除数据保存区FileInputStream fs = null;try {fs = new FileInputStream(source);int bfLen = ;byte bf[] = new byte[bfLen];fs read(bf bfLen); // 读取 字节BMP文件头int biLen = ;byte bi[] = new byte[biLen];fs read(bi biLen); // 读取 字节BMP信息头
// 源图宽度nWidth = (((int) bi[ ]xff))| (((int) bi[ ]xff))| (((int) bi[ ]xff)) | (int) bi[ ]xff;
// 源图高度nHeight = (((int) bi[ ]xff))| (((int) bi[ ]xff))| (((int) bi[ ]xff)) | (int) bi[ ]xff;
// 位数nBitCount = (((int) bi[ ]xff)) | (int) bi[ ]xff;
// 源图大小int nSizeImage = (((int) bi[ ]xff))| (((int) bi[ ]xff))| (((int) bi[ ]xff)) | (int) bi[ ]xff;
// 对 位BMP进行解析if (nBitCount == ){int nPad = (nSizeImage / nHeight) nWidth * ;nData = https://www.04ip.com/post/new int[nHeight * nWidth];nB=new int[nHeight * nWidth];nR=new int[nHeight * nWidth];nG=new int[nHeight * nWidth];byte bRGB[] = new byte[(nWidthnPad) * * nHeight];fs read(bRGB (nWidthnPad) * * nHeight);int nIndex = ;for (int j = ; jnHeight; j){for (int i = ; inWidth; i) {nData[nWidth * (nHeight j )i] = (xff)| (((int) bRGB[nIndex]xff))| (((int) bRGB[nIndex]xff))| (int) bRGB[nIndex]xff;nB[nWidth * (nHeight j )i]=(int) bRGB[nIndex] xff;nG[nWidth * (nHeight j )i]=(int) bRGB[nIndex] xff;nR[nWidth * (nHeight j )i]=(int) bRGB[nIndex] xff;nIndex= ;}nIndex= nPad;} //Toolkit kit = Toolkit getDefaultToolkit(); //image = kit createImage(new MemoryImageSource(nWidth nHeight//nData nWidth));
/*//调试数据的读取
FileWriter fw = new FileWriter( C:\\Documents and Settings\\Administrator\\My Documents\\nDataRaw txt );//创建新文件PrintWriter out = new PrintWriter(fw);for(int j= ;jnHeight;j){for(int i= ;inWidth;i){out print(( *nData[nWidth * (nHeight j )i])_nR[nWidth * (nHeight j )i]_nG[nWidth * (nHeight j )i]_nB[nWidth * (nHeight j )i]);}out println( );}out close();*/}}catch (Exception e) {e printStackTrace();throw new Exception(e);}finally {if (fs != null) {fs close();}}//return image;}
二 由r g b 获取灰度数组
publicint[] getBrightnessData(int rData[] int gData[] int bData[]){int brightnessData[]=new int[rData length];if(rData length!=gData length || rData length!=bData length|| bData length!=gData length){return brightnessData;}else {for(int i= ;ibData length;i){double temp= *rData[i]*gData[i]*bData[i];brightnessData[i]=(int)(temp) ((temp (int)(temp)) ? : );}return brightnessData;}}
三 直方图均衡化
public int [] equilibrateGray(int[] PixelsGray int width int height){int gray;int length=PixelsGray length;int FrequenceGray[]=new int[length];int SumGray[]=new int[ ];int ImageDestination[]=new int[length];for(int i = ; i length ;i){gray=PixelsGray[i];FrequenceGray[gray];}//灰度均衡化SumGray[ ]=FrequenceGray[ ];for(int i= ;i ;i){SumGray[i]=SumGray[i ] FrequenceGray[i];}for(int i= ;i ;i) {SumGray[i]=(int)(SumGray[i]* /length);}for(int i= ;iheight;i){for(int j= ;jwidth;j){int k=i*width j;ImageDestination[k]= xFF | ((SumGray[PixelsGray[k]]) | (SumGray[PixelsGray[k]] ) | SumGray[PixelsGray[k]]);}}return ImageDestination;}
四 laplace 阶滤波 增强边缘 图像锐化
public int[] laplace DFileter(int []data int width int height){int filterData[]=new int[data length];int min= ;int max= ;for(int i= ;iheight;i){for(int j= ;jwidth;j){if(i== || i==height || j== || j==width )filterData[i*width j]=data[i*width j];elsefilterData[i*width j]= *data[i*width j] data[i*width j ] data[i*width j]data[(i )*width j] data[(i )*width j ] data[(i )*width j]data[(i)*width j] data[(i)*width j ] data[(i)*width j];if(filterData[i*width j]min)min=filterData[i*width j];if(filterData[i*width j]max)max=filterData[i*width j];}}//System out println( max:max);//System out println( min:min);for(int i= ;iwidth*height;i){filterData[i]=(filterData[i] min)* /(max min);}return filterData;}
五 laplace 阶增强滤波 增强边缘 增强系数delt
public int[] laplaceHigh DFileter(int []data int width int height double delt){int filterData[]=new int[data length];int min= ;int max= ;for(int i= ;iheight;i){for(int j= ;jwidth;j){if(i== || i==height || j== || j==width )filterData[i*width j]=(int)((delt)*data[i*width j]);elsefilterData[i*width j]=(int)((delt)*data[i*width j] data[i*width j ]) data[i*width j]data[(i )*width j] data[(i )*width j ] data[(i )*width j]data[(i)*width j] data[(i)*width j ] data[(i)*width j];if(filterData[i*width j]min)min=filterData[i*width j];if(filterData[i*width j]max)max=filterData[i*width j];}}for(int i= ;iwidth*height;i){filterData[i]=(filterData[i] min)* /(max min);}return filterData;}六 局部阈值处理 值化
//局部阈值处理 值化 niblack smethod/*原理T(x y)=m(x y)k*s(x y)取一个宽度为w的矩形框 (x y)为这个框的中心统计框内数据 T(x y)为阈值 m(x y)为均值 s(x y)为均方差 k为参数(推荐 )计算出t再对(x y)进行切割 /这个算法的优点是速度快 效果好缺点是niblack smethod会产生一定的噪声*/public int[] localThresholdProcess(int []data int width int height int w int h double coefficients double gate){int[] processData=https://www.04ip.com/post/new int[data length];for(int i= ;idata length;i){processData[i]= ;}if(data length!=width*height)return processData;int wNum=width/w;int hNum=height/h;int delt[]=new int[w*h];//System out println( w;wh:hwNum:wNumhNum:hNum);for(int j= ;jhNum;j){for(int i= ;iwNum;i){//for(int j= ;j ;j){// for(int i= ;i ;i){for(int n= ;nh;n)for(int k= ;kw;k){delt[n*w k]=data[(j*h n)*width i*w k];//System out print( delt[(n*w k)]:delt[n*w k]);}//System out println();/*for(int n= ;nh;n)for(int k= ;kw;k){System out print( data[((j*h n)*width i*w k)]:data[(j*h n)*width i*w k]);}System out println();*/delt=thresholdProcess(delt w h coefficients gate);for(int n= ;nh;n)for(int k= ;kw;k){processData[(j*h n)*width i*w k]=delt[n*w k];// System out print( delt[(n*w k)]:delt[n*w k]);}//System out println();/*for(int n= ;nh;n)for(int k= ;kw;k){System out print( processData[((j*h n)*width i*w k)]:processData[(j*h n)*width i*w k]);}System out println();*/}}return processData;}
七 全局阈值处理 值化
public int[] thresholdProcess(int []data int width int height double coefficients double gate){int [] processData=https://www.04ip.com/post/new int[data length];if(data length!=width*height)return processData;else{double sum= ;double average= ;double variance= ;double threshold;if( gate!= ){threshold=gate;}else{for(int i= ;iwidth*height;i){sum =data[i];}average=sum/(width*height);for(int i= ;iwidth*height;i){variance =(data[i] average)*(data[i] average);}variance=Math sqrt(variance);threshold=average coefficients*variance;}for(int i= ;iwidth*height;i){if(data[i]threshold)processData[i]= ;elseprocessData[i]= ;}return processData;}}
八垂直边缘检测 sobel算子
public int[] verticleEdgeCheck(int []data int width int height int sobelCoefficients) throws Exception{int filterData[]=new int[data length];int min= ;int max= ;if(data length!=width*height)return filterData;try{for(int i= ;iheight;i){for(int j= ;jwidth;j){if(i== || i== || i==height || i==height||j== || j== || j==width || j==width ){filterData[i*width j]=data[i*width j];}else{double average;//中心的九个像素点//average=data[i*width j] Math sqrt( )*data[i*width j ] Math sqrt( )*data[i*width j]average=data[i*width j] sobelCoefficients*data[i*width j ] sobelCoefficients*data[i*width j]data[(i )*width j ] data[(i )*width j]data[(i)*width j ] data[(i)*width j];filterData[i*width j]=(int)(average);}if(filterData[i*width j]min)min=filterData[i*width j];if(filterData[i*width j]max)max=filterData[i*width j];}}for(int i= ;iwidth*height;i){filterData[i]=(filterData[i] min)* /(max min);}}catch (Exception e){e printStackTrace();throw new Exception(e);}return filterData;}
九图像平滑 * 掩模处理(平均处理) 降低噪声
lishixinzhi/Article/program/Java/hx/201311/26286
一段java的canny边缘检测代码,求详细注解 , 越详细越好汗个 , 这段代码倒是有点像android的
就是将图片大小排放计算出来显示;
要注释?。次募侠床藕酶闩?。里面有不少自定义的类和方法
如:image2pixels();
matlab canny算子边缘检测函数代码是什么?I = imread('lena.bmp');%%如果是其他类型图像,请先转换为灰度图
%%没有噪声时的检测结果
BW_sobel = edge(I,'sobel');
BW_prewitt = edge(I,'prewitt');
BW_roberts = edge(I,'roberts');
BW_laplace = edge(I,'log');
BW_canny = edge(I,'canny'); figure(1);
subplot(2,3,1),imshow(I),xlabel('原始图像');
subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');
subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');
subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');
subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');
subplot(2,3,6),imshow(BW_canny),xlabel('canny检测');
%%加入高斯噪声(μ=0,σ^2=0.01)检测结果
I_g1 = imnoise(I,'gaussian',0,0.01);
BW_sobel = edge(I_g1,'sobel');
BW_prewitt = edge(I_g1,'prewitt');
BW_roberts = edge(I_g1,'roberts');
BW_laplace = edge(I_g1,'log');
BW_canny = edge(I_g1,'canny'); figure(2);
subplot(2,3,1),imshow(I_g1),xlabel('加入高斯噪声(μ=0,σ^2=0.01)图像');
subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');
subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');
subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');
subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');
subplot(2,3,6),imshow(BW_canny),xlabel('canny检测');
%%加入高斯噪声(μ=0,σ^2=0.02)检测结果
I_g2 = imnoise(I,'gaussian',0,0.02);
BW_sobel = edge(I_g2,'sobel');
BW_prewitt = edge(I_g2,'prewitt');
BW_roberts = edge(I_g2,'roberts');
【java边缘检测算子代码 opencv边缘检测算子】BW_laplace = edge(I_g2,'log');
BW_canny = edge(I_g2,'canny'); figure(3);
subplot(2,3,1),imshow(I_g2),xlabel('加入高斯噪声(μ=0,σ^2=0.02)图像');
subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');
subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');
subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');
subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');
subplot(2,3,6),imshow(BW_canny),xlabel('c
一、没有噪声时的检测结果 1 原始图像
2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测
二、加入高斯噪声(μ=0,σ^2=0.01)检测结果 1 原始图像
2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测
三、加入高斯噪声(μ=0,σ^2=0.02)检测结果 1 原始图像
2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测
clear all; close all;
warning off all;
java边缘检测算子代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于opencv边缘检测算子、java边缘检测算子代码的信息别忘了在本站进行查找喔 。
推荐阅读
- 苹果现在微信还能用吗安卓,苹果现在微信还能用吗安卓可以用吗
- 苹果6pios11视频,iphone 11视频
- 手机能联机的体育游戏下载,手机联机休闲游戏
- 毕业设计代码查重java,毕业设计代码查重率怎么计算
- php对象类型数据 php类和对象的关系
- 删了什么电脑显示器不亮,电脑不知道把什么删了导致开机黑屏
- 区块链产品有多少,区块链多少种
- hget模糊查询redis,redis模糊查询key性能
- 虚拟机怎么安装mysql 虚拟机怎么安装Windows7