How exactly do I decide what blocks are valid when voting? Why would I want to vote any block as being not valid? Not to mention that putting a "no" vote in a block I am called to vote would result (if the no prevails) in the block becoming orphan and therefore no stake reward for the ticket.
Also the whole voting/staking system is automatic. My tickets are called to vote and they do. I never choose any yes or no for the blocks, I don't even know how. I only know how to vote for other stuff when available, like the lightning network or ticket price algorithm change.
Finally, with staking pools active and used by most, you could argue that staking is also quite centralized.
I have thoroughly read the Decred Documentation
https://docs.decred.org/ and could not find anything describing how to vote "yes" or "no" on individual blocks. I only found how voting works on forks -
https://docs.decred.org/getting-started/user-guides/agenda-voting/. I do think this can be done algorithmically as IncludeBeer said. However the voters still receive their block subsidy even if the majority vote "no" on a block. This is because the subsidy is given whenever a voting ticket is selected to vote. The PoW and dev subsidy are lost though and any regular transactions within that block are invalidated as stated in the Decred Constitution near the bottom of the Blockchain Governance section -
https://docs.decred.org/getting-started/constitution/.
You set your voting preference to "Yes", "No", or "Abstain" anytime after buying a ticket. Abstain is the default until you change it. Explained here
https://docs.decred.org/getting-started/user-guides/agenda-voting/ under Voting Preparation.
Staking pools do make the staking in Decred more centralized compared to other PoS coins but the combination of mining with staking makes Decred's consensus method more decentralized overall.