拿到一张声纳图,第一件事当然是把它读进来。MATLAB的imread函数闭着眼都能写出来
MATLAB环境下基于熵的声纳图像分割算法 算法程序运行环境为MATLAB R2018a执行基于熵方法的声纳图像分割步骤如下。 1. Read the Original Shipwrecked Sonar Image 2. Gray the Image 3. Denoise the Image: DCT (Discrete Cosine Transform) Denoise 4. Edge Detection (Roberts Operator) 5. Removing Shadow Boundaries 6. Image Localization (Threshold) 7. Remove Ship Boundaries 8. Image Dilate White Pixel (Morphology Dilation) 9. Merge Denoise Dilation Images 10. 2-D Entropy Segamentation 11. Postprocessingsonar_img imread(shipwreck.png);不过原图大概率是彩色的得先脱色处理。rgb2gray一上世界清净了gray_img rgb2gray(sonar_img);这时候图片八成带着海底噪声就像老电视雪花点。DCT去噪这招挺有意思——把图像分块做余弦变换砍掉高频分量。代码里8x8分块是经验值别问我为啥不是7x9问就是玄学dct_img blockproc(gray_img,[8 8],(x) idct2(threshold(dct2(x.data),20)));threshold函数自己写个阈值处理把高频系数干掉。这操作相当于给声纳图开了个美颜但别磨皮过度边缘信息还得留着检测呢。MATLAB环境下基于熵的声纳图像分割算法 算法程序运行环境为MATLAB R2018a执行基于熵方法的声纳图像分割步骤如下。 1. Read the Original Shipwrecked Sonar Image 2. Gray the Image 3. Denoise the Image: DCT (Discrete Cosine Transform) Denoise 4. Edge Detection (Roberts Operator) 5. Removing Shadow Boundaries 6. Image Localization (Threshold) 7. Remove Ship Boundaries 8. Image Dilate White Pixel (Morphology Dilation) 9. Merge Denoise Dilation Images 10. 2-D Entropy Segamentation 11. Postprocessing边缘检测环节Roberts算子这种老古董居然还在用。不过对弱边缘敏感倒是真的edge_img edge(dct_img,roberts,0.05);阈值0.05得微调太小会捕捉到噪声太大会漏真边缘。这时候阴影边界开始捣乱得用区域生长法把它们灭了。重点在于种子点选择往声波反射强的区域撒点shadow_mask regiongrowing(edge_img, seed_points, 10); clean_edge edge_img .* ~shadow_mask;处理完的边界还是支离破碎得用形态学膨胀把白像素连起来。结构元素选圆盘还是矩形有讲究这里用3x3菱形se strel(diamond,3); dilated_img imdilate(clean_edge, se);重头戏在二维熵分割。传统一维直方图熵扛不住纹理变化得搞二维联合熵。代码实现有个坑——灰度共生矩阵的计算量会指数爆炸记得用滑动窗口entropy_img entropyfilt(merged_img, ones(7)); threshold graythresh(entropy_img); binary_mask imbinarize(entropy_img, threshold*0.8);最后的后处理要玩点花活。小区域直接填平孔洞用形态学闭运算补上边缘拿中值滤波磨一磨。整个过程像拼乐高每个模块都要严丝合缝。跑完流程看着分割出来的沉船轮廓只能说——这波熵的操作稳
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437888.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!