日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Matlab实现图像白平衡(灰度世界法、全反射算法)

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab实现图像白平衡(灰度世界法、全反射算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:https://www.cnblogs.com/molakejin/p/5766132.html

白平衡

白平衡的英文為White Balance,其基本概念是“不管在任何光源下,都能將白色物體還原為白色”,對在特定光源下拍攝時出現的偏色現象,通過加強對應的補色來進行補償。

所謂的白平衡是通過對白色被攝物的顏色還原(產生純白的色彩效果),進而達到其他物體色彩準確還原的一種數字圖像色彩處理的計算方法。(源自百度百科)

灰度世界算法

灰度世界理論:認為任何一幅圖像, 當有足夠的色彩變化時, 其R, G, B分量均值會趨于平衡(即 RGB三個數值相等, 也就是說應當是黑白灰類型的顏色)。這個理論在全局白平衡中得到?泛應用, 特點是能夠利用更多的圖像信息來做判斷, 但在面對?色彩較為單一的圖像時就顯得有些乏力了。

灰度世界算法:根據灰度世界理論,將原始圖的RGB均值分別調整到R= G = B即可。不完美的地方就是這個算法對顏色不豐富的圖像敏感程度一般,處理起來效果也就不會很理想,局限性很大。

Matlab代碼實現:

clc;clear;close all;img=imread('test.png');  
subplot(121),imshow(img),title('原圖');
R = img(:,:,1);G = img(:,:,2);B = img(:,:,3);  
Rave = mean2(R);
Gave = mean2(G); 
Bave = mean2(B);
K = (Rave + Gave + Bave) / 3;R_new=(K/Rave)*R;G_new=(K/Gave)*G;B_new=(K/Bave)*B;
subplot(122),imshow(cat(3,R_new,G_new,B_new)),title('平衡后');

代碼效果:

全反射算法

全反射理論:一幅圖像中亮度最大的點就是白點, 即假設在 YCbCr 空間中Y值最?的點為白色, 以此來校正整幅圖像。特點是只考慮色彩最亮的那部分, 跟上面的灰度世界理論正好相反, 在處理色彩偏單調的圖像時效果好些, 但面對顏色豐富的圖片時,因為最亮的點不一定是?色的, 可能會出現偏色的情況。

全反射算法:該算法認為最亮的那個點就是白色,如果不是,就針對偏離白色的數值進行逆向修正。缺點是沒有高亮點或者圖像色彩復雜,它的修正效果就會比較乏力。

Matlab代碼實現(未加解釋),參考https://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html

clc;clear;close all;img=imread('test.png');
subplot(121),imshow(img),title('原圖');
R=double(img(:,:,1));G=double(img(:,:,2));B=double(img(:,:,3));histRGB=zeros(765);
[m,n,h]=size(img);
for i=1:mfor j=1:ns=sum(img(i,j,:));histRGB(s)=histRGB(s)+1;end
endnum=0;
for i=1:765num=num+histRGB(766-i);if num>m*n*0.1thresh=765-i;breakend
endamount=0;
Rave=0;Gave=0;Bave=0;
for i=1:mfor j=1:ns=sum(img(i,j,:));if s>threshRave=(Rave*amount+R(i,j))/(amount+1);Gave=(Gave*amount+G(i,j))/(amount+1);Bave=(Bave*amount+B(i,j))/(amount+1);amount=amount+1;endend
endfor i=1:mfor j=1:nR(i,j)=255*R(i,j)/Rave;if R(i,j)>255R(i,j)=255;endG(i,j)=255*G(i,j)/Gave;if G(i,j)>255G(i,j)=255;endB(i,j)=255*B(i,j)/Bave;if B(i,j)>255B(i,j)=255;endend
endsubplot(122),imshow(uint8(cat(3,R,G,B))),title('平衡后');

代碼效果:

寫在后面:
上述圖像為某潛水員在水下拍攝,為得到正確的白平衡,他拍攝了一張灰色卡片作為對比:

由灰色卡片修正圖像白平衡結果如下:

總結

以上是生活随笔為你收集整理的Matlab实现图像白平衡(灰度世界法、全反射算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。